Подтвердить что ты не робот

Группа захвата regex java

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

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));
    }
}
4b9b3361

Ответ 1

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

Ответ 2

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

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