java regge capture group - java, regex

Опитвам се да заснемам дясната част след: използване на 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));
}
}

Отговори:

29 за отговор № 1

Номерирането на подгрупи започва с 1, 0 е пълен текст. Просто отидете до броя + 1 с цикъла си.


1 за отговор № 2

Това е така, защото индексите на групата започват с 1. Група 0 е целият модел.

От JavaDoc: "Групата за заснемане се индексира от ляво на дясно, започвайки от една. Група нула обозначава целия шаблон, така че изразът m.group (0) е еквивалентен на m.group ()." Виж повече тук