我想在特殊符号边界之间对某些字符进行分组,但这个边界涉及到组。它与贪婪和不情愿的量词无关。
String str1 = "#162xd14a#";
Matcher matcher = Pattern.compile("#(.*?)#").matcher(str1);
if (matcher.matches()) {
for (int i = 0; i < matcher.groupCount(); i++) {
System.out.println(matcher.group(i));
}
}
结果:
#162xd14a#
但我期待:
162xd14a
答案 0 :(得分:5)
关于Capturing Groups的官方教程:
还有一个特殊组,即组0,它始终代表整个表达式。该组未包含在groupCount报告的总数中。
在您的示例中:
组0包含整个匹配的字符串#162xd14a#
第1组包含第一个(也是唯一的)匹配组:162xd14a
您的正则表达式中有一个组,因此groupCount()
返回1
由于<
条件
您可能希望将循环条件更改为<=
而不是<
:
for (int i = 0; i <= matcher.groupCount(); i++) {
System.out.println(matcher.group(i));
}