怎么理解Java正则表达式捕获组
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要讲解了"怎么理解Java正则表达式捕获组",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java正则表达式捕获组"吧!undefin
千家信息网最后更新 2025年11月14日怎么理解Java正则表达式捕获组
这篇文章主要讲解了"怎么理解Java正则表达式捕获组",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java正则表达式捕获组"吧!
undefined
普通捕获组(Expression)
命名捕获组(?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 个命名的捕获组,分别是:
| 编号 | 名称 | 捕获组 | 匹配 |
|---|---|---|---|
| 0 | 0 | (?\d{4})-(?(?\d{2})-(?\d{2})) | 2017-04-25 |
| 1 | year | (?\d{4})- | 2017 |
| 2 | md | (?(?\d{2})-(?\d{2})) | 04-25 |
| 3 | month | (?\d{2}) | 04 |
| 4 | date | (?\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安全错误
数据库的锁怎样保障安全
数据库中专业编号的数据类型
校园网络安全论文带举例子
视频服务器的功能
深圳创途网络技术公司法人变更
成都鲲鹏系列服务器
网络技术总顾问
本地文件夹图片传输到服务器
深圳中兴网络安全
数据库的网站的实施及服务
如何查询服务器的账户和口令
智慧法院解决方案软件开发
网络安全是计算机科学与技术专业
数据库系统集成怎么做
海淀区管理网络技术服务大概费用
收藏数据库
ibm存储服务器配置
南京灵酷网络技术有限公司
电信 网络安全三同步
色温调节软件开发
软件开发经费有那些
网络安全八个不得
数据库的作业
2015创新设计网络技术
网络安全账号克隆的原理
网络技术员实习岗位自我感受
人脸服务器价格
语音识别数据库怎么建立
安徽软件开发大专
海能达软件开发做啥的
华为服务器故障灯怎么关闭