正则表达式
快防中的正则表达式使用RE2语法,可以在这里查看RE2文档。
开始和结束
同其他正则表达式一样,可以使用^
和$
表示开始和结束:
^abc
– 必须以abc
开始efg$
– 必须以efg
结束^abc.+efg$
– 匹配对象必须是以abc
开始,efg
结束
字符集
.
– 点(.
)符号表示匹配任何字符,包括换行符[abc]
– 字符集,表示匹配abc
字符中的任何一个[^abc]
– 反向字符集,表示不匹配abc
字符中的任何一个\d
– 数字字符集,相当于[0-9]
\D
– 非数字字符集,相当于[^0-9]
\w
– 单词字符集,相当于[0-9A-Za-z_]
\W
– 非单词字符集,相当于[^0-9A-Za-z_]
\s
– 空白字符集,相当于[\t\n\f\r ]
\S
– 非空白字符集,相当于[^\t\n\f\r ]
\b
– 单词边界\B
– 非单词边界[[:alpha:]]
– ASCII字符集[[:^alpha:]]
– 非ASCII字符集\pN
– Unicode字符集,只有一个字符\p{Greek}
– Unicode字符集\p{Han}
– 中文字符集\PN
– 非Unicode字符集,只有一个字符\P{Greek}
– 非Unicode字符集
组合
xy
–x
和y
相邻,y
紧跟x
之后x|y
–x
或y
,遇到x
即宣告匹配成功
重复
x*
– 0或多个x
,尽可能匹配最多的x
x+
– 1或多个x
,尽可能匹配最多的x
x?
– 0或1个x
,尽可能匹配最多的x
x{n,m}
– n到m个x
,尽可能匹配最多的x
x{n,}
– n个以上的x
,包括n个x
,尽可能匹配最多的x
x{n}
– n个x
x*?
– 0或多个x
,尽可能匹配最少的x
x+?
– 1或多个x
,尽可能匹配最少的x
x??
– 0或1个x
,尽可能匹配最少的x
x{n,m}?
– n到m个x
,尽可能匹配最少的x
x{n,}?
– n个以上的x
,包括n个x
,尽可能匹配最少的x
x{n}?
– n个x
分组
使用圆括号进行分组:
(re)
– 编号从1开始,0表示全部匹配的内容- 比如
(hello)(world)
匹配结果就有两个分组,编号分别为1和2
- 比如
(?P<name>re)
– 命名分组- 比如使用
(?P<myName>\w+)
来匹配ZhangSan
,那么myName
对应的值就被定义为ZhangSan
- 比如使用
(?:re)
– 跳过分组- 比如
(?:hello)(world)
匹配结果就只有一个分组(world)
,编号为1;因为hello
这个分组被跳过
- 比如
标记
在别的正则表达式中称之为修饰符(modifier
):
i
– 表示大小写 不 敏感m
– 多行匹配,如果有$
结束字符的时候需要此标记s
– 让点符号(.
)也匹配\n
U
– 非贪婪模式,匹配结果尽可能少地匹配
使用(?FLAG)
或(?:FLAG)
语法来使用这些标记,并且这里的括号并不会产生新的分组:
(?i)hello(?i:hello)
以上两个表达式都表示大小写不敏感,所以HELLO
、Hello
、hello
都认为匹配成功。
转义字符
使用反斜杠表示转义字符,用来表示某个字符是原始的字符,而不是正则表达式,比如匹配文件扩展名:
\.(php|asp|jsp|py)
中的点(.)因为在正则表达式中有别的意义,所以需要用反斜杠转义。