Regex
Character
Meta
1 | .:匹配任意字符(除了换行符`\n`) |
Wildcard
.
:匹配任一字符(除了换行符\n
)[a-z]
:字母[^a-z]
:非字母[0-9]
:数字[^0-9]
:非数字[a-z0-9_]
:字母、数字、下划线[^a-z0-9_]
:非(字母、数字、下划线)[a-z\d_]
:字母、数字、下划线[a-z\d\s]
:字母、数字、空白符[abc09]
:字母(a或b或c)、数字(0或9)\d
:数字\D
:非数字\s
:空白符\S
:非空白符\w
:单词(字母、数字、下划线)\W
:非单词(字母、数字、下划线)
ps:
\A
不是代表非字母(Alphabet)的意思,而是字符串的开头
Class
[:ascii:]
:ASCII字符[:word:]
:字母、数字、下划线[:alnum:]
:字母和数字[:alpha:]
:字母[:upper:]
:大写字母[:lower:]
:小写字母[:digit:]
:数字[:xdigit:]
:十六进制数字[:cntrl:]
:控制字符[:print:]
:打印字符[:graph:]
:可视字符(不包含空白字符的打印字符)[:blank:]
:空白符(包含空格符、水平制表符)[:space:]
:空白符(包含空格符、回车符、换行符、换页符、水平制表符、垂直制表符)[:punct:]
:标点字符
Blank
\s
:匹配任何空白字符,包括空格、制表符、换页符等等,等价于[ \t\v\r\n\f]
\x20
:匹配一个空格\t
:匹配一个制表符\r
:匹配一个回车符\n
:匹配一个换行符
Boundary
^
:匹配开头(字符串开头或者多行模式时的每行开头)$
:匹配结尾(字符串结尾或者多行模式时的每行结尾)\b
:匹配单词边界\B
:匹配非单词边界\A
:匹配字符串的开头\Z
:匹配字符串的结尾或者换行符\z
:匹配字符串的结尾
边界符是零宽度字符
Expression
Repeat
?
:重复匹配0次或1次*
:重复匹配0次或多次+
:重复匹配1次或多次{n}
:重复匹配n次{m,n}
:至少重复匹配m次,最多重复匹配n次{m,}
:至少重复匹配m次{,n}
:最多重复匹配n次
Assertion
?=
:肯定式向前查看?!
:否定式向前查看?<=
:肯定式向后查看?<!
:否定式向后查看
ps:正则匹配时字符串的右边是前,左边是后
Grouping
(\d*)
:捕获分组(?<name>\d*)
:命名分组(python中是(?P<name>\d*)
)(?:\d*)
:非捕获分组
ps:0号分组是整个表达式
Mode
?
:贪婪模式*
:贪婪模式+
:贪婪模式{n}
:贪婪模式{m,n}
:贪婪模式??
:非贪婪模式*?
:非贪婪模式+?
:非贪婪模式{n}?
:非贪婪模式{m,n}?
:非贪婪模式
Flag
- 全符匹配(DOTALL):让点号(
.
)还能匹配换行符(\n
)(默认是不匹配换行符) - 多行匹配(MULTILINE):让
^
和$
匹配还能每一行的开头和结尾(默认是只匹配字符串的开头和结尾) - 全局匹配(GLOBAL):查找所有匹配项
ps:DOTALL和MULTILINE可以一起使用
ps:匹配换行符可以通过DOTALL实现,也可以通过[\s\S]
或者[\d\D]
或者[\w\W]
来实现
i
:忽略大小写s
:全符匹配m
:多行匹配g
:全局匹配u
:开启完整的unicode支持