正则表达式具有伟大技术发明的一切特点,它简单、优美、功能强大、妙用无穷。对于很多实际工作来讲,正则表达式简直是灵丹妙药,能够成百倍地提高开发效率和程序质量。
正则常见规则
字符匹配
字符 | 说明 |
---|
\ | 转义符 |
\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)a | positive lookbehind,后行断言,a 只有在 b 后面才匹配 |
(?<!b)a | negative 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|cd | match ab or cd,匹配'ab'或者'cd'字符子串 |
修饰符
字符 | 说明 |
---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
u | 开启"Unicode 模式",用来正确处理大于\uFFFF 的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。 |
s | 允许 . 匹配换行符。 |
y | 作用与 g 修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g 修饰符只要剩余位置中存在匹配就可,而 y 修饰符确保匹配必须从剩余的第一个位置开始,这也就是"粘连"的涵义 |