Java:模式匹配器方法返回错误的结果

时间:2017-10-23 18:55:56

标签: java regex

我试过很难理解这一点,但我只是不明白。  我不明白为什么在group()方法返回“34”之后start()方法返回“456”。

Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
while(m.find())
{
    System.out.print(m.start()+m.group());  // output: 01234456
}

1 个答案:

答案 0 :(得分:1)

Regex explained

你的正则表达式找到0个长度的项目,这会增加很多0长度的匹配。

解释

由于输出全部在1行,我将其拆分以使其更具可读性。

Pattern p = Pattern.compile("\\d*");
Matcher m = p.matcher("ab34ef");
while(m.find()) {
    System.out.printf("start:%s end:%s text:'%s'%n", m.start(), m.end(), m.group());
}

输出:

start:0 end:0 text:''
start:1 end:1 text:''
start:2 end:4 text:'34'
start:4 end:4 text:''
start:5 end:5 text:''
start:6 end:6 text:''

这符合您01234456的输出:

  • 0,1和2都是小组开始
  • 34是匹配文字
  • 4,5和6都是小组开始