2016-12-16 74 views
1

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

任何线索,为什么出现这种情况?

+0

请说明如何在Java代码中定义正则表达式。 –

+0

@WiktorStribiżew([\ S] *)[\ []([\ d] +)[ - ]([\ d] +)([\]]) – DreadAngel

回答

4

当使用matcher.group(int),捕获组数从1开始,0。从the docs不:

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

+4

实际上,有第0组,比赛。 –

+0

@WiktorStribiżew - 是的。感谢您指出了这一点。我只是从文档中摘录适当的摘录。为了在技术上正确,我修改了我的答案,特别说明了“捕获组数”。 –

+0

今天我学到了一些新东西。当然,我不会在Java中做很多正则表达式。谢谢。 – DejaVuSansMono