0%

正则表达式

  • 元字符
    • \d
      匹配数字
    • \w
      匹配word(数字、字母、下划线)
    • \s
      匹配white space(空格和tab)
    • \b
      匹配单词的开始或结束
    • ^
      匹配字符串的开始
    • $
      匹配字符串的结束
    • .
      匹配任何字符​
  • 常用限定符
    • {n}
      重复n次
    • {n,}
      重复n次或更多次
    • {n,m}
      ​重复n到m次
      • 匹配任意次(可以为0次)
      • 匹配重复一次或者多次

    • 转义字符,e.g. ​ .,*,\​​
    • ?
      重复零次或一次​
    • |
      分枝条件​
    • ()
      ​分组
  • 反义字符
    • \W
      匹配非word
    • \S
      匹配非whie space​​
    • \D
      匹配非数字
    • \B
      匹配不是单词开头或结束的位置
    • [^aeiou]
      匹配除了aeiou字母以外的任意字符
  • 简单例子
    • \ba\w*\b
      匹配以字母a开头的单词
    • \b0\d{2}-\d{8}
      匹配0开头格式为 0**-********* 其中*为数字
    • ^\d{5,12}$
      ​匹配5~12位数字
    • (?0\d{2}[) -]*\d{3}
      匹配 000-1234, (000)-1234, 000 1234
    • \d{3}-\d{4}|(\d{3}) \d{4}
      匹配000-1234, (000) 1234
    • (\d{1,3}.){3}\d{1,3}
      匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字
    • <a[^>]+>
      匹配用尖括号括起来的以a开头的字符串
  • 复杂用法
    • 捕获
      • (exp)
        匹配exp,并捕获文本放到自动命名组
      • (?exp)
        匹配exp,并捕获文本放到name组
      • (?:exp)
        匹配exp,不捕获文本,也不分组号​
    • 零宽断言
      • (?=exp)
        断言自身出现的位置的后面能匹配表达式exp
      • (?<=exp)
        断言自身出现的位置的前面能匹配表达式exp
    • 负向零宽断言
      • (?!exp)
        断言此位置的后面不能匹配表达式exp
      • (?<!exp)
        断言此位置的前面不能匹配表达式exp
    • 贪婪与懒惰
      • *?
        重复任意次,但尽可能少重复
      • +?
        重复1次或更多次,但尽可能少重复
      • ??
        重复0次或1次,但尽可能少重复
      • {n,m}?
        重复n到m次,但尽可能少重复
      • `{n,}?
        重复n次以上,但尽可能少重复
    • 示例
      • \b(?\w+)\b\s+\k
        可以用来匹配重复的单词,e.g. test test -> test test
      • \b\w+(?=er\b)
        匹配以er结尾的单词除去er的部分,e.g. I’m a singer -> sing​
      • (?<=\bt)\w+\b
        匹配以t开头的单词除去t的部分,e.g. I’m try to exercise my English -> ry o
      • \d{3}(?!\d)
        匹配三位数字,而且这三位数字的后面不能是数字
      • (?<![a-z])\d{7}
        匹配前面不是小写字母的七位数字
      • (?<=<(\w+)>).*(?=</\1>)
        匹配不包含属性的简单HTML标签内里的内容 e.g.
        test
        -> test
      • 2[0-4]\d(?#200-249)|250-5|[01]?\d\d?(?#0-199){
        带注释的匹配项

点击查看幕布详情