使用java.util.regex(jdk 1.6),在给定以下代码的情况下,201210(\d{5,5})Test应用于主题字符串的正则表达式将20121000002Test仅捕获group(0)而不应捕获group(1)(模式00002)正则表达式:
java.util.regex
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。
201210(\d{5,5})Test(\d{1,10})
20121000002Test0000000099
相反,通过使用JavaScript的RegExp对象,可以将完全相同的正则表达式应用于完全相同的主题字符串,从而捕获所有组。我通过使用以下在线测试器亲自检查并重新检查了这一事实:
我在这里做错什么了吗?还是Java的正则表达式库真的很烂?
m1.groupCount()返回 捕获 组的数量,即 第一种情况为1,因此您不会进入此循环for(int i = 1; i<m1.groupCount(); i++)
m1.groupCount()
for(int i = 1; i<m1.groupCount(); i++)
它应该是 for(int i = 1; i<=m1.groupCount(); i++)
for(int i = 1; i<=m1.groupCount(); i++)