• 正则表达式基础


    元字符
    正则表达式12个元字符:
    $()*+.?[^{|
    注意:没有 ] } -  ]} 只有在前面使用了{[才和它成对匹对。其他地方都认为是字面文本。
     
    转义:正则表达式的元字符转义只是在前面加斜杠 。如果有一段元字符要转移。可以使用 Q......E进行转义。 Q 和E 之前的字符会被当做字面文本来对待。
     
    不区分大小写:(?i)  (?i)和(?-i)之间的字符不区分大小写。
    (?i)[A-F0-9]
    不可打印字符,可以通过十六进制匹配
    a 振铃 0x07
    e 转义 0x1B
    f 换页 0x0C
     换行 0x0A
     回车  0x0D
     水平制表符 0x09
    v 垂直制表符 0x0B
     
    匹配多个字符之一
    c[abc]g   c[a-f]g  c[1-9]g
    匹配数字和字母 [a-zA-Z0-9]
    反向是不被允许的,如[z-a]
     
    简写
    d [d] 匹配单个数字
    D [^d] 匹配不是数字的任意字符
    w 匹配单个单词字符
    s 匹配任意的空白字符 。包括空格,制表符和换行符。
    S 匹配s不能匹配的任意字符
     
    匹配任意字符
    点号 .  匹配任意字符。点号只匹配单个字符。
    [sS]  匹配任意字符
    如果正则表达式无法启用点号匹配换行符。在点号前面加上模式修饰符。(?s)'.' 
     
    匹配起始位置 结束位置
    ^ 起始位置 如以begin开头  ^begin  或者 Abegin 
    $ 结束为止  以end结尾  end$  或者 end endz
    ^ $ A  z 称为定位符。他们不匹配任意字符。只匹配特定位置。
    匹配空白行: ^$
     
    匹配完整单词
    单词边界  ,匹配一个单词的开始和结束。
    例如:jia.txt  
    My cat is brown
    category
    wecatwe
    bobcat
    CAT
    good cat
    匹配出cat 。 cat  jia.txt  |grep -E 'cat
    非单词边界 B 匹配目标文件中不匹配的位置:
    匹配cat,但不是开头:
    cat jia.txt  |grep -E 'Bcat'
    wecatwe
    bobcat 
    匹配cat,但不是结尾:
    cat jia.txt  |grep -E 'catB'
    category
    wecatwe
    匹配cat,cat在单词中:
    cat jia.txt  |grep -E 'BcatB'
    wecatwe
     
    匹配多个选择分支之一
    | 管道    one|two|three
    完整匹配分支中的单词 (one|two|three)
     
    分组和捕获匹配
    分组是通过圆括号来实现的()
    例如:
    echo "my name is zeng" |grep -E 'nan|zen'
    echo "my name is zeng" |grep -E '(nan|zen)'
    说明:选择分支nan匹配成功(圆括号内具有最高优先级,最先执行。)接着引擎退出改分组,匹配 失败。
    echo "my name is zeng" |grep -E '(nan|zeng)' 是能匹配成功的。说明zen在匹配失败后,再次进入分支匹配。
     
    非捕获分组:
    (?: 开始 结束)
    在计算捕获分组的左括号来确定序号的时候,不会计算非捕获分组的括号,性能更好。但不会记录分组的后的内容太。以上可以写为:
    echo "my name is zeng" |grep -E '(?: nan|zeng)'
    捕获分组见【再次匹配先前匹配过的文本】来理解。
     
    带模式修饰符的分组
    例如:
    gooD(?i:one|WO|NAME) 在()内的内容就成了大小写不敏感。
     
    再次匹配先前匹配过的文本
    例如:我们想找出一个日期。年的后两位和日月相同。如2008-08-08 2009-09-09
    dd(dd)-1-1
     表示单词定界符
    d表示匹配数值。
    (dd)先把年的后两位做分组。
    1 表示匹配第一个分组
    正则表达式在一个完整的单词里面捕获到(dd)分组保存到1号捕获分组。接着匹配-。接着1号分组。。。。
     
    捕获和命名匹配子串
    把捕获到的匹配子串分别保存到对应名称。
    例如:
    (?<year>dddd)-(?<month>dd)-(?<day>dd)
    把年月日分别存储在 year month day的子串中。而不是默认的1 2 3 。
     
    把正则表达式的一部分重复多次
    {n} 重复之前表达式n次
    {n,m} 重复n到m次
    {1,} 至少1次以上
    {0,} 至少0次以上
    d{100} 重复数字100次
    [a-f0-9]{1,8} 十六进制整数 
     
    正则表达式的注释
    例如日期:
    1、宽松排列语法:
    (?x)d4 #year
    -         #separator
    d{2}   #month
    -         #separator
    d{2}         #separator
    2、(?#comment) 注释方法:
    (?#year)d{4}(?#separator)-(?#month)d{2}-(?#day)d{2}
    (?x) 放在正则表达式的最开始地方。确保 (?x) 之前不存在任何空格。
  • 相关阅读:
    【总结】进程和线程的区别
    为什么要求数据链路层帧的长度必须限制在一定范围内?
    常用正交表
    用正交表设计测试用例
    测试中的杀虫剂困境
    作品集-1:淘宝支付宝登陆框
    # 36氪开放日 • 杭州 • 11月10日 # 谈谈参会感受
    《在你身边,为你设计》读后感
    抱怨的背后
    更快的方式实现PHP数组去重
  • 原文地址:https://www.cnblogs.com/vansky/p/9511219.html
Copyright © 2020-2023  润新知