正则表达式

语法 解释 匹配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,模式的剩余部分将无法匹配。

评论