正则表达式
正则表达式(Regular Expression),简写regex、regexp或RE。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。通常被用来检索、替换那些符合某个模式(规则)的文本。
简介
时间轴
基本语法
一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。如this, that都可以由th(is|at)
这个模式来描述。
符号
正则表达式由普通字符,比如:abc;或者是简单字符和特殊字符的组合,比如ab\*c。
特殊字符是由元字符(Metacharacter);或元字符和普通字符构成,比如\\d表示匹配一个数字。元字符是有特殊意义的字符,它们被作为一般的字符使用时,必须要通过“转义”(前面加一个反斜杠“\”)来去除他们本身的特殊意义,这14个元字符如下:
. ^ $ * + ? { } [ ] \ | ( )
正则表达式中的特殊字符列表:
特殊字符 | 含义 | 示例 |
---|---|---|
\ | 转义特殊字符,或和其他字符构成特殊字符。 | \\ 匹配 \ ,\d 匹配数字 |
^ | 匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置。在下面的特殊字符[^xyz]表示不包含方括号中的字符。 | ^A 匹配 "An E" 中的 'A',但不会匹配 "an A" 中的 'A'。 |
$ | 匹配输入的结束。如果多行标志被设置为 true,那么也匹配换行符前的位置。 | t$ 匹配 "eat" 中的 't',但不匹配 "eater" 中的 't'。 |
* | 匹配前一个表达式 0 次或多次。等价于 {0,}。 | bo* 匹配 "A ghost boooooed" 中的 'booooo' 和 "A bird warbled" 中的 'b' |
+ | 匹配前面一个表达式 1 次或者多次。等价于 {1,}。 | a+ 匹配 "candy" 中的 'a' 和 "caaaaaaandy" 中的 'aaaaaaa'。 |
? | 匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。还用于先行断言中,如本表的 x(?=y) 和 x(?!y) 条目所述。 | e?le? 匹配 "angel" 中的 'el'、"angle" 中的 'le' 以及 "oslo' 中的 'l'。 |
. | 默认匹配除换行符之外的任何单个字符。如果指定了参数DOTALL ,它将匹配包括换行符的任意字符。 | .n 匹配 "nay, an apple is on the tree" 中的 'an' 和 'on'. |
{n} | n 是一个非负整数,匹配前一个字符刚好出现了n次。 | a{2}匹配“caandy”中的'aa'和“caaaandy”中的前面的'aa',但不匹配“candy”中的'a' |
{n,} | n 是一个非负整数,匹配前一个字符至少出现了n次。 | a{2,}匹配“caandy”中的'aa'和“caaaandy”中的'aaaa',但不匹配“candy”中的'a' |
{n,m} | m 和 n 均为非负整数,匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。 | a{1, 3} 匹配“candy”中的a和“caandy”中的'aa'和“caaaandy”中的前面'aaa',但不匹配“cndy”中的任意字符。 |
[xyz] | 一个字符集合。匹配方括号中的任意字符。特殊符号"\ * . "在字符集没有特殊意义。可以使用破折号(-)来指定一个字符范围。 | [abcd] 和[a-d]是一样的,可以匹配"brisket"中的‘b’和“city”中的‘c’。 |
[^xyz] | 一个反向字符集。匹配任何没有包含在方括号中的字符。可以使用破折号(-)来指定一个字符范围。任何普通字符在这里都是起作用的。 | [^abc] 和 [^a-c] 是一样的。可以匹配"brisket"中的‘r’和匹配“chop”中的‘h’。 |
[\b] | 匹配一个退格(U+0008)。 | |
\b | 匹配一个词的边界。 | \bm 匹配“moon”中的‘m’,但oo\b 不能匹配"moon"中的'oo',而 oon\b/匹配"moon"中的'oon'。 |
\B | 匹配一个非单词边界。 | \B..匹配"noonday"中的'oo',y\B..匹配"possibly yesterday"中的’yes‘。 |
\cX | 匹配字符串中的一个控制符,当X是处于A到Z之间的字符的时候。 | \cM匹配字符串中的 control-M (U+000D)。 |
\d | 匹配一个数字。等价于[0-9]。 | \d 匹配"B2 is the suite number."中的'2'。 |
\D | 匹配一个非数字字符。等价于[^0-9]。 | \D 匹配"B2 is the suite number."中的'B' 。 |
\f | 匹配一个换页符 (U+000C)。 | |
\n | 匹配一个换行符 (U+000A)。 | |
\r | 匹配一个回车符 (U+000D)。 | |
\s | 匹配一个空白字符,包括空格、制表符、换页符和换行符。 | \s\w*匹配"foo bar."中的' bar'。 |
\S | 匹配一个非空白字符。 | \S\w* 匹配"foo bar."中的'foo' |
\t | 匹配一个水平制表符 (U+0009)。 | |
\v | 匹配一个垂直制表符 (U+000B)。 | |
\w | 匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。 | \w 匹配 "apple," 中的 'a'和 |
\W | 匹配一个非单字字符。等价于 [^A-Za-z0-9_]。 | \W匹配 "50%." 中的 '%'。"$5.28,"中的 '5'。 |
(x) | 分组,能够重复使用x表达式和提取该组匹配值。重复引用通过\n(数字)。改组的值在正则表达式的替换环节可以通过$n(数字)来获取。注意组值为第一次匹配值 | (f.o) \1 匹配'bar fao fao bar'中的'fao fao',python中值 |
(?:x) |