热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么捕获组中的标志会删除该组?》经验,为你挑选了1个好方法。

在以下代码中,(?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))


)  
,作为
推荐阅读
author-avatar
雪_月_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有