正则 : 分组与引用
【在线测试地址】:正则表达式在线测试
0. 简介
在正则中,当多个元字符组成的某个部分,需要被当作一个整体处理的时候,可以用()将其括起来,此时括号中的表达式被保存为一个子组;
通过分组编号还可以引用分组中的表达式进行查找和替换;
1. 分组与编号
括号在正则中用于分组,**被括号括起来的规则匹配到的对应数据**会被保存为一个子组;
简单来讲,第几个左括号就是第几个分组,括号嵌套的情况也是这么计算,分组编号从1 开始计数;
(aaa)(bbb)
aaa就是第一个分组,bbb就是第二个分组
下面的例子就是将表达式中\w*匹配到的文本作为第一个分组的数据,然后可以在替换的正则中引用
![](https://img2020.cnblogs.com/blog/1294391/202112/1294391-20211202215649214-555975418.png)
2. 不保存子组
有时候不需要将括号内的子组保存,此时可以在括号内前面添加 ?: 表示不保存该子组;
(?: 表达式)
不需要保存子组时,就可以使用这种方式,还可以提高匹配效率;
(aaa)(?:bbb)
此时没有保存第二个分组,也不能被引用,使用\2的方式引用该分组时,编辑器显示为红色,表示该正则错误
![](https://img2020.cnblogs.com/blog/1294391/202007/1294391-20200705232111826-770154927.png)
3. 分组引用
括号对表达式分组后,可以通过 ”反斜杠 + 编号“ 来引用分组;
上面的方式无效的时候可以使用 $ + 编号 的方式尝试一下;
(Cat)\1
\1 表示引用第一个分组(Cat)
通过引用分组进行替换
![](https://img2020.cnblogs.com/blog/1294391/202007/1294391-20200705231201193-1499246660.png)
4. 分组命名
有时候,表达式可能后续要进行修改,如果通过分组编号引用子组,则分组发生变化时也要调整对应的编号,此时可以通过给分组命名,引用指定名称的分组;
格式为 (?P<分组名称> 正则表达式)
如果文章对您有所帮助,可以点一下推荐