作者:雪_月_ | 来源:互联网 | 2022-12-07 10:21
在以下代码中,(?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));
}
}
括号确实捕获.如你所见,如果我们这样做
matcher.replaceAll("cold")
它将归还"冷酷的狗"
我希望(?i:hot)等同于((?i)hot),但事实并非如此.后一种情况是一个捕获组.
这不是Java RegEx Matcher的副本.groupCount返回0,因为在那个问题中,确实没有捕获组,所以groupCount正确返回0.但是在我的情况下,这确实应该被认为是捕获组,因为它确实执行了捕获!
1> shmosel..:
它在文档中是正确的:
(?idmsux-idmsux:X) X,作为非捕获组,具有给定标志idmsux on-off
如果你想要一个捕获组,只需将它包装在另一组括号中:
((?i:hot))
)
,作为