相关疑难解决方法(0)

java.util.regex.Matcher中的groupCount()始终返回0

我试图计算字符串中有多少匹配模式.我是新手使用java.util.regex,我打算使用matcher.groupCount()来获取匹配组的数量.因为根据文档,它返回捕获组的数量.

返回此匹配器模式中捕获组的数量.

组0表示按惯例的整个模式.它不包含在此计数中.

小于或等于此方法返回的值的任何非负整数都保证是此匹配器的有效组索引.

这是我的问题的简化示例:

Pattern pattern = Pattern.compile("@");
Matcher matcher = pattern.matcher("@#@#@#@#@");
System.out.println(matcher.groupCount());
Run Code Online (Sandbox Code Playgroud)

它的输出是0.我误解了哪一部分?如何计算匹配模式的数量?

java regex

3
推荐指数
1
解决办法
2128
查看次数

为什么捕获组中的标志会删除该组?

在以下代码中,(?i:hot)是一个捕获组.或者至少它应该是...它匹配表达式并消耗字符.

但是,当我尝试获取组计数时,它返回0.

Pattern pattern = Pattern.compile("(?i:hot)");
Matcher matcher = pattern.matcher("hot diggity dog");
while (matcher.find()) {
    int groupCount = matcher.groupCount(); // returns 0
    for (int i = 0; i <= groupCount; i++) {
        System.out.printf("%d. %s%n", i, matcher.group(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

括号确实捕获.如你所见,如果我们这样做

matcher.replaceAll("cold")
Run Code Online (Sandbox Code Playgroud)

它将归还"冷酷的狗"

我希望(?i:hot)等同于((?i)hot),但事实并非如此.后一种情况是一个捕获组.

这不是Java RegEx Matcher的副本.groupCount返回0,因为在那个问题中,确实没有捕获组,所以groupCount正确返回0.但是在我的情况下,这确实应该被认为是捕获组,因为它确实执行了捕获!

java regex

0
推荐指数
1
解决办法
90
查看次数

标签 统计

java ×2

regex ×2