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支持