Как получить все подходящие части для регулярного выражения
Я должен разобрать строку в 3 этапа. Работает только первый этап, на 2 и 3 этапах matcher.groupCount() возвращает 0 - что означает, что ничего не найдено. Я проверял свое регулярное выражение в онлайн-тестере, и это было просто прекрасно. Но здесь это не работает. Итак, вопрос в том, может быть, я что-то упустил, или в регулярном выражении есть ошибка?
String rawText = "ashjdajsdg:[requiredPartForFirstPattern]}asdassdasd";
Pattern firstPattern = Pattern.compile("(:\\[)(.*?)(\\]})");
List<String> firstList = parseContent(rawText, firstPattern);
После выполнения firstList должен содержать только одно значение (в данном случае): "requiredPartForFirstPattern" (может быть любой символ или любая последовательность символов).
Теперь я перебираю все значения в firstList и проверяю их с помощью шаблона 2:
Все значения в firstList будут иметь такую форму: "[someText1],[someText2],[someText3]".
String rawText = "[someText1],[someText2],[someText3]";
Pattern secondPattern = Pattern.compile("(\\[([^]]*)\\])");
List<String> secondList = parseContent(rawText, secondPattern);
После выполнения secondList должен содержать следующие значения (в данном случае): "someText1","someText2","someText3".
И наконец третий этап. Я перебираю все значения в secondList и проверяю их по 3 шаблонам. Все значения в secondList будут иметь такую форму: "someValue1" someValue2 ".
String rawText = "'someValue1','someValue2'";
Pattern thirdPattern = Pattern.compile("('(.*?)')");
List<String> thirdList = parseContent(rawText, secondPattern);
После выполнения secondList должен содержать следующие значения (в данном случае): "someValue1","someValue2".
Мой метод parseContent:
private List<String> parseContent(String content, Pattern pattern) {
List<String> matchedList = new LinkedList<>();
Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
for(int matchIndex = 0; matchIndex < matcher.groupCount(); ++matchIndex) {
matchedList.add(matcher.group(matchIndex));
}
}
return matchedList;
}
1 ответ
Вы должны иметь while (matcher.find()) вместо оператора if.
if (matcher.find()) {
for(int matchIndex = 0; matchIndex < matcher.groupCount(); ++matchIndex) {
matchedList.add(matcher.group(matchIndex));
}
}
Я заменил приведенный выше код на этот:
while (matcher.find()) {
matchedList.add(matcher.group(1));
}
Работает нормально, ты за помощь.