正则表达式简介

大白2022年10月27日大约 3 分钟

正则表达式具有伟大技术发明的一切特点,它简单、优美、功能强大、妙用无穷。对于很多实际工作来讲,正则表达式简直是灵丹妙药,能够成百倍地提高开发效率和程序质量。

正则常见规则

字符匹配

字符说明
\转义符
\d[0-9]。表示是一位数字。
\D[^0-9]。表示除数字外的任意字符。
\w[0-9a-zA-Z_]。表示数字、大小写字母和下划线。
\W[^0-9a-zA-Z_]。非单词字符。
\s[\t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。
\S[^\t\v\n\r\f]。非空白符。
.[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。
\uxxxx查找以十六进制数 xxxx 规定的 Unicode 字符。
\f匹配一个换页符 (U+000C)。
\n匹配一个换行符 (U+000A)。
\r匹配一个回车符 (U+000D)。
\t匹配一个水平制表符 (U+0009)。
\v匹配一个垂直制表符 (U+000B)。
\0匹配 NULL(U+0000)字符, 不要在这后面跟其它小数,因为 \0 是一个八进制转义序列。
[\b]匹配一个退格(U+0008)。(不要和\b 混淆了。)
[abc]any of a, b, or c
[^abc]not a, b, or c
[a-g]character between a & g

位置匹配

字符说明
^一行的开始
$一行的结束
\b是单词边界,具体就是\w\W 之间的位置,也包括\w^ 之间的位置,也包括\w\w之间的位置。具体来说就是 \w\w\W\W、与 \W\W 与之间的位置
\B\b 的反面的意思,非单词边界。例如在字符串中所有位置中,扣掉 \b,剩下的都是 \B 的。
\G前一个匹配的结束
^abc$字符串开始、结束的位置

字符说明
(abc)捕获组
\n回溯到组#n。分组引用,引用第 n 个捕获组匹配的内容, 其中 n 是正整数
(?:abc)非捕获组

先行断言

字符说明
a(?=b)positive lookahead,先行断言,a 只有在 b 前面才匹配
a(?!b)negative lookahead,先行否定断言,a 只有不在 b 前面才匹配

后行断言

字符说明
(?<=b)apositive lookbehind,后行断言,a 只有在 b 后面才匹配
(?<!b)anegative lookbehind,后行否定断言,a 只有不在 b 后面才匹配

量词和分支

字符说明
a*0 or more
a+1 or more
a?0 or 1
a{5}正好5个
a{2,}2个或更多
a{1,3}1 和 3 个之间
a+?惰性匹配,就是尽可能少的匹配
a{2,}?惰性匹配,就是尽可能少的匹配

分支

字符说明
ab|cdmatch ab or cd,匹配'ab'或者'cd'字符子串

修饰符

字符说明
i执行对大小写不敏感的匹配。
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m执行多行匹配。
u开启"Unicode 模式",用来正确处理大于\uFFFF 的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。
s允许 . 匹配换行符。
y作用与 g 修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g 修饰符只要剩余位置中存在匹配就可,而 y 修饰符确保匹配必须从剩余的第一个位置开始,这也就是"粘连"的涵义
上次编辑于:
贡献者: yangyxd