- 位置类:
^ 匹配字符串的开始(或行的结束)
$ 匹配字符串的结束(或行的结束)
\b 匹配单词的开始和结束
- 字符类:
\d 匹配任意的单个数字
. 匹配任意的单个字符(不包括换行)
\s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等
\w 匹配字母或数字或下划线或汉字
[.?!] 匹配括号里的某个字符(示例是标点符号(.或?或!),注意不需要加转义)
[0-9] 匹配括号里的某个字符,以范围表示方式
- 字符类(反义)
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了 x以外的任意字符
[^aeiou] 匹配除了 aeiou这几个字母以外的任意字符
- 重复类:
* 表示前面的字符匹配重复任意次(可能是 0 次)
+ 表示前面的字符匹配重复任意次(不能是 0 次)
? 表示前面的字符匹配重复0或1次
{n} 表示前面的字符有n个
{m,n} 表示前面的字符有最少m个,最多n个
- 重复类(懒惰类):
*? 表示前面的字符匹配重复任意次(可能是 0 次),但尽可能少重复
+? 表示前面的字符匹配重复任意次(不能是 0 次),但尽可能少重复
?? 表示前面的字符匹配重复0或1次,但尽可能少重复
{n}? 表示前面的字符有n个,但尽可能少重复
{m,n}? 表示前面的字符有最少m个,最多n个,但尽可能少重复
6.字符转义
\ 类似C++的转义符,将某个代表符表示为自身
- 其他:
| 把不同的规则分隔开,提供类似C++“或”的语义,注意其语义会到下一"|"或者右括号
() 子表达,也叫做分组
\n 引用第n个子表达式
?<Word> 给子表达式命名,如(?<Word>\w+),这样就把\w+的组名指定为Word了
\k<Word> 引用Word子表达式
(?=exp) 也叫零宽先行断言,它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。比如\b\w+(?=ing\b),匹配以 ing 结尾的单词的前面部分(除了 ing 以外的部分),如果在查找I'm singing while you're dancing.时,它会匹配sing和 danc。
(?<=exp) 也叫零宽后行断言,它匹配文本中的某些位置,这些位置的前面能给定的前缀匹配exp。比如(?<=\bre)\w+\b 会匹配以re开头的单词的后半部分(除了 re以外的部分),例如在查找reading a book 时,它匹配 ading。
更多零宽匹配和平衡组见:正则表达式.pdf(正则表达式 30 分钟入门教程(第二版))
网友评论