匹配器没有返回正确的组号

Dre*_*gel 1 java regex

通过我测试了我的正则表达式

([\S]*)[\[]([\d]+)[-]([\d]+)[\]]
Run Code Online (Sandbox Code Playgroud)

但是当我在 Java 中使用它时,它不会返回给我最后找到的组。

例如:值 -索引 [1-9]

通过 regex101 - 它返回我“索引”、“1”、“9”

但在 Java 中 - 仅“索引”和“1”

这是我正在使用的一段代码:

String regex = "([\\S]*)[\\[]([\\d]+)[-]([\\d]+)[\\]]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
if(matcher.find()){
 for (int i = 0; i < matcher.groupCount(); i++)
        System.out.println(matcher.group(i));
}
Run Code Online (Sandbox Code Playgroud)

任何线索,为什么会发生这种情况?

Ted*_*opp 5

使用时matcher.group(int),捕获组编号从 1 开始,而不是 0。来自文档

捕获组从左到右编入索引,从 1 开始。组零表示整个模式,因此表达式m.group(0)等效于m.group()

  • 其实还有0组,就是整场比赛。 (4认同)