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)*?)\*/'