正则表达式的匹配机制:
字符集:
[ X ] | 表示匹配X |
[^X] | 表示不匹配X |
[A-X] | 表示匹配范围A-X |
[02457] 匹配 0 2 4 5 7
[01234] 匹配 0 1 2 3 4 等价于[0-4]
[0-9] 匹配 0-9
[^0-9] 不匹配 0-9
[a-z] 匹配 a-z
[^a-z] 不匹配 a-z
[a-zA-Z]匹配 a-z A-Z
量词:
m{X} | 表示匹配X次 |
m{X,Y} | 最下匹配X次,最多匹配Y次 |
m? | 匹配0次或1次 相当于m{0,1} |
m+ | 至少匹配1次 相当于m{1,} |
m* | 匹配0次或多次 相当于m{0,} |
5{1} 匹配一次[5-9]{1} 匹配一次5{1,5} 最少一次,最多五次[1-9]{1,} 最少一次[a-z]? 0次或一次 {0,1}[A-Z]+ 至少匹配一次 {1,0}[a-zA-Z]* 0次或多次 {0,}
字符集的字符和缩写
\t \v | 制表符水平,竖直 |
\r \n | 回车和换行 |
\xhhhh \0ooo | 表示16进制数,8进制数 |
. | 匹配任何字符 |
\d \D | 匹配一个数字,匹配一个非数字 |
\s \S | 匹配一个空格,匹配一个非空格 |
\w \W | 匹配一个单词,匹配一个非单词 |
\\ | \ |
\% | % |
\^ | ^ |
\n | 反向引用 \1、 \2等,把前面的分组赋值个\1、\2 |
\t\n[123]?\w 匹配 水平制表 换行 [123]匹配0个或1个 匹配一个单词
\%\^\\ 匹配 %^\
\d{5} 匹配5个数字
\d\s{5} 匹配1个数字和5个字符
.* 匹配任意字符0个或多个
断言:
^ | 匹配开头 |
$ | 匹配结尾 |
\b | 字符边界 |
\B | 非字符边界 |
(?=E) | 尾部匹配则为true |
(?!E) | 尾部不匹配为true |
(?<=E) | 头部匹配 |
(? | 头部不匹配 |
^9\w{10} 匹配9接10个字符开头
1111$ 匹配1111结尾的
\babcd\b 匹配abcd这个单词断言的使用
\w+(?=tion) 判断是否是tion结尾
\w+(?!tion) 判断是否不是tion结尾
(<=tion)\w+ 判断是否是tion开头
(
通配符:
? | 匹配单个字符 |
* | 匹配0个或多个字符 |
[] | 字符集可以用方括号表示,类似于完整的正则表达式 |
*.txt 匹配.txt 文件
分组:
(\w) 表示一个分组
(\w)(\w) 自动命名分组,第一个为1,第二个为2
(?'GG'\w*))定义一个名为 GG的分组
分组和反向引用的例子:
(\w+)\s\1 匹配 Hellow Hellow \1 代表(\w+)的内容
(\d+)\s(\d+)\s\1\s\2
匹配 1111 2222 1111 2222
\1代表第一个(\d+)
\2代表第二个(\d+)(?\w+)\s+\k \k 代表(?\w+)
(ab|cd) 要么匹配ab 要么匹配cd
需要转义的字符:$ ( ) * + . [ ] ? \ { } |
\?\[\} 匹配?[}
贪婪和懒惰:
- 贪婪:匹配尽可能长的字符串
- 懒惰:匹配尽可能短的字符串
- 懒惰模式的启用只需在重复元字符之后加
?
既可
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |