группа захвата регулярных выражений Java - PullRequest
23 голосов
/ 29 июля 2011

Я пытаюсь захватить правую часть после: используя Java-выражение, но в следующем коде напечатанная группа захвата представляет собой целую строку, что не так?

String s ="xyz: 123a-45";   
String patternStr="xyz:[ \\t]*([\\S ]+)";
Pattern p = Pattern.compile(patternStr);
Matcher m = p.matcher(s);
//System.err.println(s);
if(m.find()){
    int count = m.groupCount();
    System.out.println("group count is "+count);
    for(int i=0;i<count;i++){
        System.out.println(m.group(i));
    }
}

Ответы [ 2 ]

29 голосов
/ 29 июля 2011

Нумерация подгрупп начинается с 1, 0 - полный текст. Просто идите до подсчета +1 с вашей петлей.

1 голос
/ 29 июля 2011

Это потому, что индексы группы начинаются с 1. Группа 0 - это весь шаблон.

Из JavaDoc: «Группы захвата индексируются слева направо, начиная с единицы. Группа ноль обозначает весь шаблон, поэтому выражение m.group (0) эквивалентно m.group (). "Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...