正则表达式将边界限制为组

时间:2016-07-10 08:35:02

标签: java regex

我想在特殊符号边界之间对某些字符进行分组,但这个边界涉及到组。它与贪婪和不情愿的量词无关。

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

1 个答案:

答案 0 :(得分:5)

关于Capturing Groups的官方教程:

  

还有一个特殊组,即组0,它始终代表整个表达式。该组未包含在groupCount报告的总数中。

在您的示例中:

  • 组0包含整个匹配的字符串#162xd14a#

  • 第1组包含第一个(也是唯一的)匹配组:162xd14a

  • 您的正则表达式中有一个组,因此groupCount()返回1

  • 由于<条件

  • ,循环在到达第1组之前停止

您可能希望将循环条件更改为<=而不是<

for (int i = 0; i <= matcher.groupCount(); i++) {
    System.out.println(matcher.group(i));
}