java - 为什么捕获组中的标志会删除该组?
问题描述
在下面的代码中,(?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")
它会返回“cold diggity dog”
我希望 (?i:hot) 等价于 ((?i)hot),但事实并非如此。后一种情况是捕获组。
这不是Java RegEx Matcher.groupCount 返回 0的副本,因为在那个问题中,确实没有捕获组,所以 groupCount 正确返回 0。但是在我的情况下,这确实应该被视为一个捕获组,因为它确实执行了捕获!
解决方案
推荐阅读
- mongodb - MongoDB 使主分片(不要与副本集的主分片混淆)仅保存未分片的集合
- arrays - 继续获取“索引超出范围”
- amazon-ec2 - 区域 eu-west-2 不适用于 aws 模块 boto.ec2 最新
- c# - C#:我如何在完成播放后关闭我的视频闪屏
- typescript - 为什么打字稿 aws-cdk init-template 将其应用程序包含在 bin 目录中并作为二进制文件包含在 package.json 中?
- ubuntu - 如何解决在 Linux 上安装 Minikube for Kuberntes 的错误
- javascript - Laravel 销毁嵌套资源
- python - 属性错误“float”对象没有指定为对象的列的属性“split”
- vue.js - Vue:在子组件上使用 v-for?
- sqlite - 如何将json数据存储在sqlite中并在flutter/dart中读取?