当前位置: 首页 > news >正文

正则表达式非捕获分组?:

一个使用 Java 正则表达式的具体例子,展示了 (ab)+(?:ab)+ 的不同:

示例 1:使用 (ab)+(捕获分组)

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String text = "ababab";
        
        // 使用捕获分组
        String regex = "(ab)+";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            // 捕获组 1 是每个 'ab' 的匹配
            System.out.println("Matched: " + matcher.group(1));
        }
    }
}
 

运行结果:

Matched: ab

Matched: ab

Matched: ab

解释:

  • 在这个例子中,(ab)+ 会将每个 ab 捕获为分组 1,并在每次匹配时输出 ab
  • 每个匹配的 ab 都被捕获并打印出来。

示例 2:使用 (?:ab)+(非捕获分组)

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String text = "ababab";
        
        // 使用非捕获分组
        String regex = "(?:ab)+";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            // 这里没有捕获分组,所以直接输出匹配的字符串
            System.out.println("Matched: " + matcher.group());
        }
    }
}
 

运行结果:

Matched: ababab

解释:

  • 在这个例子中,(?:ab)+ 会匹配 ababab 整个字符串,但由于使用了非捕获分组,它不会将 ab 保存到捕获组中。
  • matcher.group() 只返回整个匹配的字符串,即 ababab,没有对单独的 ab 进行捕获。

总结:

  • 使用 (ab)+ 时,每次匹配到的 ab 都会被捕获并存储,可以通过 matcher.group(1) 获取。
  • 使用 (?:ab)+ 时,匹配到的整个字符串 ababab 会被匹配,但没有分组存储每个 ab,所以无法提取每个 ab
http://www.xdnf.cn/news/324307.html

相关文章:

  • CHAPTER 17 Iterators, Generators, and Classic Coroutines
  • 构建高质量数据湖:大数据治理在湖仓一体架构下的实践指南
  • mathtype转化
  • Vivo 手机官网交互效果实现解析
  • arXiv论文 MALOnt: An Ontology for Malware Threat Intelligence
  • ubuntu中解决matplotlib无法显示中文问题
  • 【MVCP】基于解纠缠表示学习和跨模态-上下文关联挖掘的多模态情感分析
  • 码蹄集——平方根X、整除幸运数
  • Rust 与 Golang 深度对决:从语法到应用场景的全方位解析
  • 平面坐标系中判断点P是否在线段上AB上的常用方法总结
  • 【渗透测试】命令执行漏洞的原理、利用方式、防范措施
  • 滚动条样式
  • 数据治理与数据资产管理研究方向展望
  • 【java】使用iText实现pdf文件增加水印功能
  • windows下docker的使用
  • Java从入门到精通 - 程序流程控制
  • 相似命令对比
  • 华为云API、SDK是什么意思?有什么区别和联系?
  • 如何在sheel中运行Spark
  • ClimateCatcher专用CDS配置教程
  • 携手高校科研团队,共建TWS耳机芯片技术新生态
  • linux下的Redis的编译安装与配置
  • 夸克网盘链接失效检测工具
  • 多模态大语言模型arxiv论文略读(六十三)
  • 分区器(2)
  • 【Python】通过`Editable Install`模式详解,解决Python开发总是import出错的问题
  • spring ioc实现原理
  • Linux NVIDIA 显卡驱动安装指南(适用于 RHEL/CentOS)
  • 低代码 x AI,解锁数智化应用的创新引擎
  • Spark-Core(RDD行动算子)