Java Regex не находит группы

362
04 февраля 2017, 08:08

Имею такой паттерн:

(?m).*\\bkey\b\\s+(\\w+)\\s+(\\w+).*

и например, такой текст:

key type value

При поиске с функцией .find(), вывожу все группы:

for (int i = 0; i < matcher.groupCount(); i++) {
    System.out.println(matcher.group(i));
}

но здесь он почему-то не выводит 'value', результат:

key type value
type

в чем может быть дело?

Answer 1

Количество групп, возвращаемых groupCount(), это количество захватывающих групп в шаблоне + целое совпадение.

String s = "key type value";
Pattern pattern = Pattern.compile("(?m).*\\bkey\\b\\s+(\\w+)\\s+(\\w+).*");
Matcher matcher = pattern.matcher(s);
while(matcher.find()) {
    for (int i = 0; i <= matcher.groupCount(); i++) { // Тут i <= matcher.groupCount()
        System.out.println(matcher.group(i));
    }
}

См. Java-демо.

READ ALSO
Как адекватно работать с Hibernate

Как адекватно работать с Hibernate

Приветствую, собственно в чем моя проблемаНикак не могу адекватно заставить работать Hibernate

441
Генерация страниц html

Генерация страниц html

Переписываем проекты c SilverLight на ASPNET MVC

415
Exception Value: [Errno 32] Broken pipe - какие причины ошибки

Exception Value: [Errno 32] Broken pipe - какие причины ошибки

Имеется рабочий сайт, но с недавнего времени выводится на определенную страницу эта ошибка Exception Value: [Errno 32] Broken pipe

463
Расположение SEO текста

Расположение SEO текста

Доброго времени суток всем, недавно меня попросили выполнить одну задачу, которая поставила меня в тупик, от подобной реализации решили отказаться...

447