本篇内容分组、回溯
分组
当使用分组时,除了获得整个匹配。
还能够在匹配中选择每一个分组。
要实现分组很简单,使用()即可。
看一下用分组提取手机号、IP、html标签中的响应数据
贪婪和懒惰
贪婪是尽可能的多
懒惰是尽可能的少
贪婪匹配和懒惰匹配 影响的是正则表达式的限定符的匹配结果;
在限定符后面加上?,则为懒惰模式;在限定符后面不加?,则为贪婪模式;
正则表达式语法 | 说明 |
---|---|
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到Im次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
提取学号
接下来编写正则表达式匹配不同格式的学号,并将其中的关键信息用分组提取出来,需要分成三个分组。
提取年月日
或者条件
使用分组的时候,可以使用或者条件:各个后缀名之间加上一个 | 符号
提取视频
提取图片
非捕获
并不需要捕获某个分组的内容,但又使用分组的特性。可以使用非捕获组(?:表达式),从而不捕获数据,还能使用分组的功能。
提取目标数据中的电话号码:75855
多格式年月日的提取
20210102
2021-01-02
2021-1-2
2021.01.02
2021 01 02
2021 1 2
2021/01/02
[-./\s]表示匹配三个可能出现的分隔符-./和空白,?表示匹配它们0次或者1次,其他年月日的数据使用\d{N}与分组结合就可以提取到目标数据。
提取多格式电话号码
回溯
运用也有正则表达式知识,去操作标签语言的时候。
上图可知在标签不一样的时候是无法进行辨识的。
回溯,就是要求和之前分组一样。
(.*?)\1>中有两个分组,\1表示第一个分组。
上图的练习内容可以看到是ABBA型,\2表示第二个分组。
上图的练习内容可以看到是AB【C】【D】AB【C】【D】型。