怎么理解Java正则表达式捕获组
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要讲解了"怎么理解Java正则表达式捕获组",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java正则表达式捕获组"吧!undefin
千家信息网最后更新 2025年02月07日怎么理解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安全错误
数据库的锁怎样保障安全
网络安全服务合作流程
什么是网络安全方案设计
水电站信息与网络安全自查报告
如何维护数据库的完整性
十三五时期网络安全工作成就
数据库时间格式化
拼接屏触摸软件开发公司
无线网络安全性wpa
服务器开机自检处理初始化
浪潮ai服务器为什么这么便宜
湖畔网络技术有限公司待遇
徐汇区仓库管理软件开发
英雄联盟国际服服务器出现问题
北京大学软件开发
华东lol服务器
哪些是正确的网络安全攻略
军用网络安全学院
xsgl数据库是现成的吗
动漫软件开发工资
网络安全日期
网络安全服务演讲ppt
网络安全 三同步原则
维护数据库安全性有哪些措施
网络技术服务的岗位名称
大型网络安全隐患
华芯通服务器股票
石家庄托管服务器哪个牌子好
管理网络技术服务口碑推荐
在深圳学习网络技术怎么样
绝对安全的数据库