[疯狂Java]正则表达式:捕获组、反向引用、捕获组命名
来源:互联网 发布:js 如何取list 编辑:程序博客网 时间:2024/04/27 22:24
1. 捕获组及其编号:
1) 捕获组之前讲过,就是匹配到的内容,按照()子表达式划分成若干组;
2) 例如正则表达式:(ab)(cd(ef))就有三个捕获组,没出现一对()就是一个捕获组
3) 捕获组编号规则:
i. 引擎会对捕获组进行编号,编号规则是左括号(从左到右出现的顺序,从1开始编号;
ii. 例如:
2. 反向引用:
1) 捕获组的作用就是为了可以在正则表达式内部或者外部(Java方法)引用它;
2) 如何引用?当然是通过前面讲的用捕获组的编号来引用咯!
3) 正则表达式内部引用:
i. \X:X是一个十进制数,X的范围必须落在捕获组编号范围之内,该表达式就匹配X号捕获组所匹配到的内容;
ii. 从上面的描述可以看出,\X匹配的内容是必须X号捕获组匹配成功之后才能确定的!
iii. 例如:([ab])\1,匹配aabbcc的结果是aa和bb,\1的内容必须要让1号捕获组捕获后才能确定,如果1号捕获的是a那么\1就是a,1号捕获到了b那么\1就是b;
4) 正则表达式外部引用:就是用Matcher对象的start、end、group查询匹配信息时,使用捕获组编号对捕获组引用(int group);
3. 捕获组命名:
1) 如果捕获组的数量非常多,那都用数字进行编号并引用将会非常混乱,并且难以记忆每个捕获组的内容及意义,因此对捕获组命名显得尤为重要;
2) Java 7开始提供了对捕获组命名的语法,并且可以通过捕获组的名称对捕获组反向引用(内外都行);
i. 命名捕获组的语法格式:(?<自定义名>expr)
ii. 例如:(?<year>\d{4})-(?<date>\d{2}-(?<day>\d{2}))
a. 有三个命名捕获组year、date和day
b. 从左到右编号分别为1、2、3(编号同样是有效的)
3) 命名捕获组的反向引用:
i. 正则表达式内引用:\k<捕获组名称>
!例如:(?<year>\d{4})-\k<year>可以匹配1999-1999
ii. 外部引用:Matcher对象的start、end、group的String name参数指定要查询的捕获组的名称;
4. 普通捕获组和命名捕获组的混合编号:
1) 普通捕获组是相对命名捕获组的,即没有显式命名的捕获组;
2) 当所有捕获组都是命名捕获组时那么编号规则和原来相同,即按照左括号(的出现顺序来编号;
3) 当普通捕获组和命名捕获组同时出现时,编号规则为:先不忽略命名捕获组,只对普通捕获组按照左括号顺序编号,然后再对命名捕获组从左往右累计编号,例如:
!先忽略命名命名捕获组<date>,先对普通捕获组编号\d{4}是1,\d\d是2,然后再接着累加地对命名捕获组编号,因此<date>是3;
- [疯狂Java]正则表达式:捕获组、反向引用、捕获组命名
- Java 正则表达式 - 命名捕获组
- 正则表达式 分组捕获(反向引用)
- JDK7 正则表达式 捕获组命名
- java正则表达式捕获组
- java中的正则表达式捕获组与引用的概念
- JAVA正则表达式的捕获组、back引用、"$n"
- 正则表达式之二——捕获组、非捕获组、环视、固化分组、反向引用、回溯
- js中使用正则表达式(五)特殊字符、匹配模式、捕获组与反向引用介绍
- JAVA正则表达式-捕获组与非捕获组
- JAVA正则表达式-捕获组与非捕获组
- JAVA正则表达式-捕获组与非捕获组
- JAVA正则表达式-捕获组与非捕获组
- JAVA正则表达式-捕获组与非捕获组
- 正则表达式- 捕获组 非捕获组
- java 高级正则表达式 分组 捕获 引用
- Java正则表达式:什么是非捕获组
- java正则表达式 非捕获组详解
- Android开发基础复习zhi2
- iOS_二维码名片vCard
- Regex
- PHP实例化对象
- 微信对接
- [疯狂Java]正则表达式:捕获组、反向引用、捕获组命名
- Nodejs 发送HTTP POST请求实例
- 新的选择器
- Rule of three
- BZOJ3527 力
- 《学习opencv》笔记——关于一些绘图的函数
- java泛型方法
- 插入排序
- 前端工作环境的搭建