正则表达式

注意:正则表达式匹配是匹配字符串,而不是行匹配模糊过滤,处理的也是字符串

基本字符匹配

1
2
3
4
.       : 单个任意
[] : 括号内任意单个字符
[^ ] : 除括号内任意单个
| : 逻辑或; eg: cat|dog

字符类

1
2
3
4
5
6
7

\d : [0-9]
\D : [^0-9]
\w : [a-zA-Z0-9_]
\W : [^a-zA-Z0-9_]
\s : [\t\n \r\v\f] 匹配任意空白字符
\S : [^\t\n \r\v\f]

空白字符

1
2
3
4
5
6
# CR \r     : 回车
# LF \n : 换行
# CRLF \r\n
# \t : tab制表符
# \f : 换页符
# \v : 垂直制表符

定位符

1
2
3
4
^       : 行开头,^cat,cat开头的行
$ : 行结尾, cat$, cat结尾的行
\b : 单词边界,\bcat, cat单词开头;cat\b,cat单词结尾;\bcat\b,cat这个单词
\B : 非单词边界,\Bcat\B,在单词内,例acatm

量词

1
2
3
4
5
6
*       : 匹配前面0-n次,a*也就是a{0,n}
+ : 匹配前面1次或多次,a+也就是a{1,n}
? : 匹配前面0次或1次,a?也就是a{0,1}
{n} : 匹配n次前面的元素
{n,} : 匹配n次前面或者更多的元素
{n,m} : 匹配n次到m次前面的元素

贪婪匹配与非贪婪匹配

1
2
ab{3,}  : 默认贪婪匹配,有abbbbb,就不会只匹配前面的abbb
ab{3,}? : 非贪婪匹配, 有abbbbb, 只匹配说的至少3个就行abbb

分组与引用

1
2
(abc)   : 把abc变成一个匹配整体,后面加量词也是整体,可以通过按顺序\n或$n来引用()匹配成功的内容
(?:abc) : 加了?:就不捕获了,就只是分组看做一个整体, 给量词使用或者

旗帜

1
2
3
4
i       : /xxx/xxx/i 忽略大小写匹配
m : /xxx/xxx/m 默认^$只匹配整个字符串(包括\n)的开头和结尾,加了m就可以匹配每行的
s : /xxx/xxx/s 单行模式,也就是整体看做一个字符串,. 就会匹配包含\n换行符在内的所有字符
g : /xxx/xxx/g 匹配文本中的所有实例,而不是只是每行的第一个;eg php中不支持g,用preg_match_all

前瞻

1
2
cat(?=dog)  : 正,catdog的cat; eg: ?= 也就是dog等于的情况下前面的cat
cat(?!dog) : 负, catcow的cat,后面不是dog的cat; eg: ?! 也就是dog不等于的情况前面的cat

后顾

1
2
(?<=cat)dog  : 正,加了个<指后面,换过来了,cat匹配,就后面dog
(?<!cat)dog : 负, cat不匹配,就后面的dog