正则表达式学习

参考教程 知乎链接

简单字符

没有特殊意义的字符
/abc/,/T_T/

转义字符

用,用于匹配不方便显示的特殊字符或者定义的特殊意义的字符

/\.*+?|()[]{}-等字符需要加转义字符\

  • \n 匹配换行
  • \r 匹配回车
  • \t 匹配制表符,tab
  • \v 匹配垂直制表符
  • \x+两个十六进制数字 匹配双字节字符
  • \u+四个十六进制数字 匹配Unicode字符(utf-8)
    • 汉字为\u4e00-\u9fa5
    • 日文为\u0800-\u4e00
  • \w 匹配字母,数字,下划线
  • \W 匹配除了字母,数字,下划线以外的字符
  • \s 匹配空白字符,如空格,tab等
  • \S 匹配非空白字符
  • \d 匹配数字字符
  • \D 匹配非数字字符
  • \b 匹配单词边界
  • \B 匹配非单词边界
  • \\ 匹配\自己

字符集和

使用[]匹配一类字符

如[abc],[789]等

中间字符很多时可以用-表示一个范围内的字符

如[a-zA-Z],[0-9]等

在前面加^表示非,匹配范围之外的任意字符

如[^abc]

还有内置字符集,如.匹配单个除了换行和行结束符的字符,等价于[^\n]

量词

量词的记号放在后面

  • {n}表示匹配n次
  • {m,n}表示匹配m-n次
  • {m,}表示匹配m到无穷多次
  • ?表示匹配0或1次={0,1}
  • +表示匹配1到无穷多次={1,}
  • *表示匹配0到无穷多次={0,}

正则匹配是贪婪的,会优先匹配上限

可以在量词后面加?来开启非贪婪模式

字符边界

如用xxx开头,用xxx结尾等

^在[]外表示匹配开头,如^abc

$表示匹配结尾,如abc$

\b表示匹配单词边界

选择表达式

匹配几组多字符

使用|表示分组

如123|456|789

分组和引用

使用()包裹表示一组,可以作用于量词

如(abc){2},(123|789){3}

默认分组是可捕获分组

可以在(前括号后加?:表示非捕获分组,提高性能和简化逻辑,如(?:abc)+

引用为\+数字,表示引用前面第几个捕获分组,非捕获分组无法被引用

如匹配html标签时,<xxx></xxx>中xxx应保持一致,则使用<([a-z]+)><\/\1>来匹配

预搜索

正反向预搜索声明本身不会作为匹配的结果

正向预搜索:指定被搜索部分后面字符的特征

  • 正声明(?= ),匹配项后面的字符匹配指定字符

    如\d{4}(?=abc)可以匹配到1234abc,但无法匹配到7890def
  • 反声明(?! ),匹配项后面的字符不是指定字符

    如\d{4}(?!abc)不能匹配1234abc,但可以匹配7890def

反向预搜索:指定被搜索部分前面字符的特征

  • 正声明(?<= >),匹配项前面字符匹配指定字符

    如(?<=abc)\d{4}可以匹配abc1234,但不能匹配def7890
  • 反声明(?<! >),匹配项前面字符不是指定字符

    如(?<!abc)\d{4}不能匹配abc1234,但可以匹配def7890

修饰符

修饰符位于表达式之外/pattern/flags

  • i 不区分大小写
  • g 全局匹配(默认情况下只匹配到一个,g修饰符下会匹配多个)
  • m 多行匹配(默认情况下,^$是匹配文本的开始结束,m修饰符下会变为行的开头和结束)
  • s 特殊字符.可以匹配包含换行符
  • U 只匹配最近的一个字符,不重复匹配(相当于不贪婪?)

正则表达式学习
https://www.wuzeyu.site/2022/03/22/regular-expression/
作者
吴泽雨
发布于
2022年3月23日
许可协议