正则表达式无法捕获所有组

使用java.util.regex (jdk 1.6),应用于主题字符串20121000002Test的正则表达式201210(d{5,5})Test仅捕获group(0)并且不捕获group(1) (模式00002 )因为它应该,给定下面的代码:

Pattern p1 = Pattern.compile("201210(d{5,5})Test");
Matcher m1 = p1.matcher("20121000002Test");

if(m1.find()){

    for(int i = 1; i<m1.groupCount(); i++){         
    System.out.println("number = "+m1.group(i));            
    }
}

奇怪的是,应用于主题字符串20121000002Test0000000099另一个类似正则表达式201210(d{5,5})Test(d{1,10}) 20121000002Test0000000099捕获组0和1,但不捕获组2。

相反,通过使用JavaScript的RegExp对象,应用于完全相同主题字符串的完全相同的正则表达式可捕获所有组,如人们所期望的那样。 我使用这些在线测试人员检查并重新检查了这一事实:

  • http://www.regular-expressions.info/javascriptexample.html
  • http://www.regextester.com/
  • 我在这里做错了什么? 还是说Java的正则表达式库真的很糟糕?


    m1.groupCount()返回捕获组的数量,即。 1在你的第一种情况下,所以你不会进入这个循环for(int i = 1; i<m1.groupCount(); i++)

    它应该是for(int i = 1; i<=m1.groupCount(); i++)


    改变线

    for(int i = 1; i<m1.groupCount(); i++){     
    

    for(int i = 1; i<=m1.groupCount(); i++){      //NOTE THE = ADDED HERE    
    

    它现在作为一种魅力!


    来自java.util.regex.MatchResult.groupCount:

    零组表示按照惯例的整个模式。 这不包括在这个计数中。

    所以迭代groupCount() + 1

    链接地址: http://www.djcxy.com/p/74839.html

    上一篇: Regex fails to capture all groups

    下一篇: Atomic group and non