正则表达式学习
参考教程 知乎链接
简单字符
没有特殊意义的字符
/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/