有关基本正则表达式的简易笔记

[迁移]

0x80 来源

正则表达式RE无论是原生支持还是作为模块,存在于各大编程语言和工具当中,也确实提高了工作效率。
对于源于Unix的ed工具的grep的扩展工具egrep,在shell中出场的机会很多,此笔记用于记录正则的常见元字符。

0x81 基础约定

  1. ‘^’行开始元字符 $行结尾元字符 ‘^cat$’ -> cat单行文本
  2. ‘[ ]’ 字符组 ‘gr[ae]y’ -> gray,grey
  3. ‘[1-4]’ 字符组连字符’-‘ ‘A[1-4]B’ -> A1B,A2B,A3B,A4B
    PS:对于'A[-4]B' -> A-B,A4B 其中连字符'-'临近字符组元字符时相当于普通字符
    
  4. ‘[^1-4]’ 字符组排除字符 ‘A[^1-6]B’ -> ‘A[^123456]B’ -> 除A1B…A6B的其他匹配项
    PS:'q[^u]' 不匹配类似Iraq等以q结尾的项,因为q[^u]是匹配q后不包含u的匹配项而不是允许不匹配
    
  5. ‘.’ 任意字符匹配符 ‘A.B’ -> AaB,A B,……
    PS:'[.]'中的'.'为普通字符 'A[.]B' -> A.B
    
  6. ‘|’ 子表达式或字符 进行或匹配,只需任一表达式匹配 ‘A|B’ -> xAx,xBx
    PS:'()'可表示多选范围 'gr[ae]y' -> 'gr(a|e)y'
    
  7. ‘\<’词开始元字符 ‘>‘词结束元字符 ‘\’ -> 包含cat文本的所有行
  8. ‘?’可选项字符(0个或1个) ‘+’多次重复字符(1个或n个) ‘*‘任意前字符(任意个)
    PS:'4(th)?' -> 4,4th    'a+' -> a,aa,aaa,......    'a*' -> (),a,aa,aaa,......
    
  9. ‘{1,3}’ 匹配量词区间字符 ‘*’的具化 ‘a{1,3}’ -> a,aa,aaa
  10. \ 转义字符以及反向引用 ‘.‘指普通字符’.’ ‘\1VVVV\2’(’$1VVVV$2’)指前匹配项分别填充1,2位置

以上10条规则便是简单的正则表达式匹配规则,对于不同的流派或实现会出现差异,其中以Perl的元字符数量和规范性最强,很多语言或工具宣称自己的RE高度兼容PerlRE。哈哈哈哈哈哈