匹配器未返回正确的组号

时间:2016-12-16 14:40:46

标签: java regex

via我测试了我的正则表达式

([\S]*)[\[]([\d]+)[-]([\d]+)[\]]

但是当我在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));
}

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

1 个答案:

答案 0 :(得分:4)

使用matcher.group(int)时,捕获组编号从1开始,而不是0.从the docs开始:

  

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