正则表达式
语法 | 解释 | 匹配case |
---|---|---|
字符类 | ||
. | 匹配除换行符 \n 之外的任何单字符 | |
\t \n \r \f \a \e | 制表符 换行符 回车符 换页符 警告符 逃逸符 | |
[abc] | 匹配 a b c 中的任何字符 | a |
[^abc] | 匹配非 a b c 的任何字符,^ 表示补集 | d |
[\w&&[^abc]] | 匹配非abc的任何词语字符, && 表示两个集合的交集 | d |
\ | 转义字符,匹配特殊字符时都需要转义 | |
预定义字符集 | ||
\d | 一个数字[0-9] | |
\D | 一个非数字[^0-9] | |
\s | 一个空白字符[\t\n\r\f\x0B] | |
\S | 一个非空白字符 | |
\w | 一个词语字符[a-zA-Z0-9_] | |
\W | 一个非词语字符[^a-zA-Z0-9_] | |
\p{name} | 一个命名字符类 | |
\P{name} | 一个命名字符类的补集 | |
量词 | ||
[abc]* | 匹配 abc 集合0次或者多次 | |
[abc]? | 匹配 abc 集合0次或者1次; 也有吝啬匹配的作用,也称勉强匹配 | |
[abc]+ | 匹配 abc 集合1次或者多次;也有贪婪匹配的作用,也称占有匹配 | |
[abc]{n} [abc]{n,} [abc]{n,m} | 分别匹配n次,至少n次,至少n次至多m次 | |
集合操作 | ||
[abc][def] | 匹配a或b或c打头,后面接着d或e或f的字符串 | bd |
[abc] | [def] | 匹配 abc def |
边界匹配符 | ||
^ $ | 输入的开头和结尾;多行模式下匹配行的开头和结尾 | |
\A \z | 输入的开头和结尾 | |
\Z | 除了行终止符之外的输入结尾 | |
\G | 前一个匹配的结尾 | |
\b \B | 一个词语边界,即字与空格间的位置;一个非词语边界 | |
群组 | ||
(X) | 匹配将X作为群组匹配的字符串 | 使用 ((1?[0-9]):([0-5][0-9]))[ap]m 匹配 11:59pm |
\n | 第n个群组的匹配 | \0是匹配到的字符串11:59pm, \1是第一个(的内容也就是11:59,\2是11,\3是59 |
关于吝啬匹配与贪婪匹配:
通常情况下,量词要匹配能够使整个匹配成功的最大可能的重复次数。
你可以修改这种行为,方法是使用后缀?(使用吝啬匹配,也就是匹配最小的重复次数)或使用后缀+(使用贪婪匹配,也就是即使让整个匹配失败,也要匹配最大的重复次数)。
例如,字符串cab匹配[a-z]*ab,但是不匹配[a-z]*+ab。在第一种情况中,表达式[a-z]*只匹配字符c,使得字符ab匹配模式的剩余部分;但是贪婪版本[a-z]*+将匹配字符cab,模式的剩余部分将无法匹配。