千家信息网

怎么理解Java正则表达式捕获组

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要讲解了"怎么理解Java正则表达式捕获组",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java正则表达式捕获组"吧!undefin
千家信息网最后更新 2026年11月04日怎么理解Java正则表达式捕获组

这篇文章主要讲解了"怎么理解Java正则表达式捕获组",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java正则表达式捕获组"吧!

undefined

  1. 普通捕获组(Expression)

  2. 命名捕获组(?Expression)

普通捕获组

从正则表达式左侧开始,每出现一个左括号"("记做一个分组,分组编号从 1 开始。0 代表整个表达式。

对于时间字符串:2017-04-25,表达式如下

(\\d{4})-((\\d{2})-(\\d{2}))

有 4 个左括号,所以有 4 个分组:

编号捕获组匹配
0(\d{4})-((\d{2})-(\d{2}))2017-04-25
1(\d{4})2017
2((\d{2})-(\d{2}))04-25
3(\d{2})04
4(\d{2})25
public static final String DATE_STRING = "2017-04-25";public static final String P_COMM = "(\\d{4})-((\\d{2})-(\\d{2}))"; Pattern pattern = Pattern.compile(P_COMM);Matcher matcher = pattern.matcher(DATE_STRING);matcher.find();//必须要有这句System.out.printf("\nmatcher.group(0) value:%s", matcher.group(0));System.out.printf("\nmatcher.group(1) value:%s", matcher.group(1));System.out.printf("\nmatcher.group(2) value:%s", matcher.group(2));System.out.printf("\nmatcher.group(3) value:%s", matcher.group(3));System.out.printf("\nmatcher.group(4) value:%s", matcher.group(4));

命名捕获组

每个以左括号开始的捕获组,都紧跟着 ?,而后才是正则表达式。

对于时间字符串:2017-04-25,表达式如下:

(?\\d{4})-(?(?\\d{2})-(?\\d{2}))

有 4 个命名的捕获组,分别是:

编号名称捕获组匹配
00(?\d{4})-(?(?\d{2})-(?\d{2}))2017-04-25
1year(?\d{4})-2017
2md(?(?\d{2})-(?\d{2}))04-25
3month(?\d{2})04
4date(?\d{2})25
public static final String P_NAMED = "(?\\d{4})-(?(?\\d{2})-(?\\d{2}))";public static final String DATE_STRING = "2017-04-25"; Pattern pattern = Pattern.compile(P_NAMED);Matcher matcher = pattern.matcher(DATE_STRING);matcher.find();System.out.printf("\n===========使用名称获取=============");System.out.printf("\nmatcher.group(0) value:%s", matcher.group(0));System.out.printf("\n matcher.group('year') value:%s", matcher.group("year"));System.out.printf("\nmatcher.group('md') value:%s", matcher.group("md"));System.out.printf("\nmatcher.group('month') value:%s", matcher.group("month"));System.out.printf("\nmatcher.group('date') value:%s", matcher.group("date"));matcher.reset();System.out.printf("\n===========使用编号获取=============");matcher.find();System.out.printf("\nmatcher.group(0) value:%s", matcher.group(0));System.out.printf("\nmatcher.group(1) value:%s", matcher.group(1));System.out.printf("\nmatcher.group(2) value:%s", matcher.group(2));System.out.printf("\nmatcher.group(3) value:%s", matcher.group(3));System.out.printf("\nmatcher.group(4) value:%s", matcher.group(4));

PS:非捕获组

在左括号后紧跟 ?:,而后再加上正则表达式,构成非捕获组 (?:Expression)。

对于时间字符串:2017-04-25,表达式如下:

(?:\\d{4})-((\\d{2})-(\\d{2}))

这个正则表达式虽然有四个左括号,理论上有 4 个捕获组。但是第一组 (?:\d{4}),其实是被忽略的。当使用 matcher.group(4) 时,系统会报错。

编号捕获组匹配
0(\d{4})-((\d{2})-(\d{2}))2017-04-25
1((\d{2})-(\d{2}))04-25
2(\d{2})04
3(\d{2})25

感谢各位的阅读,以上就是"怎么理解Java正则表达式捕获组"的内容了,经过本文的学习后,相信大家对怎么理解Java正则表达式捕获组这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

表达式 正则 括号 字符 字符串 时间 分组 学习 普通 内容 名称 代表 就是 思路 情况 文章 更多 理论 知识 知识点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 南京欣网互联网络科技 广州万易互联网科技有限公司 北京路客互联网科技有限公司 善班互联网科技有限公司 撒么互联网科技公司 哈尔滨秒房互联网科技有限公司 济南和联互联网科技有限公司 中盈科技互联网信息有限公司 哈尔滨新华互联网科技学院 昭通互联网科技选哪家 互联网科技公司有风险吗 米聚互联网科技南京有限公司排面 产业互联网科技服务公司 35岁以上互联网科技行业 2021世界互联网领先科技成果发布 上海乐五互联网科技有限公司 云鲸互联网络科技有限公司 唯美互联网科技 互联网科技和医药行业 互联网科技网 互联网未来科技 唐信互联网科技 华脉科技工业互联网产品 互联网科技寓意 昭通云南众福互联网科技有限公司 荆州市昕露互联网络科技有限公司 工业互联网等科技实现智能化赋能 神州科技互联网有限公司 西安左小互联网科技有限公司
0