Regex
基础
Literal Characters
- 普通字符: “a”
- 转义字符:
"\","^","$",".","|","?","*","+","()","[]","{}"
“.“匹配任一字符
- “gr.y"可以匹配"gray”,“grey"或"gr%y”
- 应尽量少使用”.“来匹配
- 除了换行符
“?”, “*”, “+”, “{n}“表示 Repetition
"?"表示0次或1次,例如colou?r匹配color或colour"*"表示0次或多次"+"表示1次或多次"{n}"表示n次,"{n,m}"表示n到m次
例子:<[A-Za-z][A-Za-z0-9]*> 表示 "*" 前面的 [A-Za-z0-9] 重复0次或多次,可以匹配 xml 中的一个 tag
“[]” 表示 Character Sets
- 用中括号括起来的一组字符,匹配其中一个char:
- ex: gr[ae]y: 匹配"gray"或"grey”
- 在中括号中使用
"-"来表示一个范围:- ex: [0-9a-zA-Z]匹配一个字母或数字
- 在中括号中使用
"^"来表示去掉某些字符:- ex: “q[^u]“表示"q"后面不接"u"字符
“|” 表示 Alternation
- 例如"cat|dog"可以匹配"cat"或"dog”
- 可以连续使用,例如"cat|dog|fish”
- 使用括号将选择括起,例如
cat|dog food匹配cat或dog food,而(cat|dog) food匹配cat food或dog food
Anchors
"^"匹配一行之首"&"匹配一行之尾"\b"匹配一个单词之首或之尾,例如\bhi\b可以匹配say hi tom中的hi
Shorthand Character Classes
"\d"表示一个数字字符"\w"表示一个字母字符,包括a-z,A-Z和"_",等价于[a-zA-Z_]"\s"表示一个空白字符,包括空格、tab、换行符
Non-Printable Characters
"\t"、"\n"等,使用"\uFFFF"或"\x{FFFF}"表示 unicode 字符
Greedy and Lazy Repetition
- 上面的
"?","*","+"默认为贪婪匹配,例如<.+>会匹配<EM>first</EM>而不是其中的<EM> - 在 quantifier 后面加上
"?"改变为懒惰匹配,例如<.+?>会匹配<EM>
Grouping and Capturing
- 用小括号将一组字符组合,在匹配后可以 capture 该组
- 使用
Set(?:Value)?创建 group 但是不会创建 capturing group
Backreferences
([abc]=\1)可以匹配a=a,b=b,c=c等
Lookaround
- 匹配一个
group周边的字符q(?=u)匹配question中的"q""q(?!u)"匹配"Iraq"中的"q""(?<=a>)b"匹配"abc"中的"b"
常用
多行匹配
"." 不能匹配换行符,(?:.|\n) 指定了一个非捕获组,来匹配换行符
r'/\*((?:.|\n)*?)\*/'