分组

作者: codeing小牛 | 来源:发表于2018-02-27 12:31 被阅读23次

    分组其实就是讲较长的匹配表达式用括号括起来,然后将这一部分视为一个整体进行操作.

    对单个字符的重复匹配需要在字符后面加上限定符,如果是多个字符的重复匹配,则可以把多个字符作为一个分组在分组后面加上限定符即可

    常用分组语法:


    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
    

    相关文章

      网友评论

          本文标题:分组

          本文链接:https://www.haomeiwen.com/subject/ztztgxtx.html