分组其实就是讲较长的匹配表达式用括号括起来,然后将这一部分视为一个整体进行操作.
对单个字符的重复匹配需要在字符后面加上限定符,如果是多个字符的重复匹配,则可以把多个字符作为一个分组在分组后面加上限定符即可
常用分组语法:
1234.png
捕获:对匹配到的数据进行暂存
零宽断言:该表达式只匹配一个位置标记,所匹配的结果并不会显示出来,因此所匹配到的字符串宽度为0
注释:便于阅读
ps
1分组0对应整个正则表达式
2 组号分配过程会从左到右扫描两遍,第一遍给未命名分组进行分配,第二遍给命名分组分配,因此所有命名的组号都大于未命名的组号
3 可以使用(?:exp)的方法来剥夺一个分组对组号的分配权
例子
将(ing)整体作为一个分组进行匹配,限定匹配一次
lily is singing while joe is danceing
\b[a-z]+(ing){1}\b
共找到 2 处匹配:
singing
danceing
将^(\d{2}.){3}作为一个分组,匹配三次
10.10.88.18
^(\d{2}\.){3}\d{2}$
共找到 1 处匹配:
10.10.88.18
\1 可以引用(\w+)中匹配到的内容
long long ago
\b(\w+)\b\s+\1\b
共找到 1 处匹配:
long long
由于使用了(?:exp)语法,(?:\w+)没有对应的分组编号,\1 不会获取到分组内容,无法进行匹配
long long ago
\b(?:\w+)\b\s+\1\b
(没有匹配)
零宽断言(?=ing\b)匹配到的内容不作为匹配结果进行显示
lily is singing while joe is dancing
\b\w+(?=ing\b)
共找到 2 处匹配:
sing
danc
零宽断言}(?=@qq.com)匹配到的内容不作为匹配结果进行显示
1540699763@qq.com lalalalal2012@163.com
\d{7,11}(?=@qq.com)|\w+(?=@163.com)
共找到 2 处匹配:
1540699763
lalalalal2012
网友评论