小编典典

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

java

使用java.util.regex(jdk
1.6),在给定以下代码的情况下,201210(\d{5,5})Test应用于主题字符串的正则表达式将20121000002Test仅捕获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));            
    }
}

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

相反,通过使用JavaScript的RegExp对象,可以将完全相同的正则表达式应用于完全相同的主题字符串,从而捕获所有组。我通过使用以下在线测试器亲自检查并重新检查了这一事实:

我在这里做错什么了吗?还是Java的正则表达式库真的很烂?


阅读 290

收藏
2020-11-30

共1个答案

小编典典

m1.groupCount()返回 捕获 组的数量,即 第一种情况为1,因此您不会进入此循环for(int i = 1; i<m1.groupCount(); i++)

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

2020-11-30