当前位置: 首页 > 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.dtcms.com/a/176691.html

相关文章:

  • AI训练服务器概述
  • 混合云安全实战:如何构建稳固的云安全防线?
  • 【ARM AMBA AHB 入门 3 -- AHB 总线介绍】
  • 数字康养新范式:七彩喜平台重构智慧养老生态的深度实践
  • 欧姆龙 PLC串口转网口模块cjcp系列SG-CJCP-110
  • 浅谈广告投放从业者底层思维逻辑
  • 结构体的学习
  • eclipse开发环境中缺少JavaEE组件如何安装
  • shell操作文件上传
  • 第十节:图像处理基础-图像算术运算 (加法、减法、混合)
  • C++ 静态成员
  • void*在c语言中什么意思(非常详细)
  • 【MVCP】基于解纠缠表示学习和跨模态-上下文关联挖掘的多模态情感分析
  • 5月8日直播见!Atlassian Team‘25大会精华+AI实战分享
  • 蓝桥杯2025年第十六届省赛真题-水质检测
  • oracle 优化器
  • 【数据结构入门训练DAY-28】蓝桥杯算法提高VIP-产生数
  • 从交互说明文档,到页面流程图设计全过程
  • NGINX `ngx_http_charset_module` 字符集声明与编码转换
  • K8S 基于本地存储的持久卷
  • QUIC协议优化:HTTP_3环境下的超高速异步抓取方案
  • DIFY教程第五弹:科研论文翻译与SEO翻译应用
  • 解决二分类问题常用的模型以及优缺点和使用场景(二)
  • Linux 修改bond后网关不生效的问题
  • 指定Docker镜像源,使用阿里云加速异常解决
  • WordPress_depicter Sql注入漏洞复现(CVE-2025-2011)
  • Spring MVC中跨域问题处理
  • Spark的基本介绍
  • 电子电器架构 --- 网关释放buffer的必要性
  • 深入探索Linux命名管道(FIFO):原理、实践与高级技巧