1. 简介
正则表达式是尝试匹配输入文本的一种模式。模式由一个或多个字符文本、运算符或构造组成。
2. 语法
-
字符转义
正则表达式中的反斜杠字符(\)指示其后跟的字符(如下表)是特殊字符,或按照原意解释该字符。
转义字符 | 描述 | 模式 | 匹配(红色标出) |
\a | 与报警(bell)符\u0007匹配 | \a | “Error!” + ’\u0007’ |
\b | 与退格键\u0008匹配 | [\b]{3,} | “\b\b\b\b” |
\t | 与制表符\u0009匹配 | (\w+)\t | “item1\titem2\t” |
\r | 与回车符\u000D匹配。与\n不等效 | \r\n(\w+) | “\r\nThese are \ntwo lines” |
\v | 与垂直制表符\u000B匹配 | [\v]{2,} | “\v\v\v” |
\f | 与换页符\u000C匹配 | [\f]{2,} | “\f\f\f” |
\n | 与换行符\u000A匹配 | \r\n(\w+) | “\r\nThese are \ntwo lines” |
-
字符类
字符类与一组字符中在的任意一个字符匹配。
转义字符 | 描述 | 模式 | 匹配(红色标出) |
[character_group] | 匹配character_group中任何单个字符,区分大小写 | [ae] | “gray” |
[^character_group] | 求反:与不在character_group中任何单个字符匹配,区分大小写 | [^ae] | “gray” |
[first-last] | 字符范围:从第一个至最后一个范围内的任何单个字符 | [A-Z] | “AB123”匹配”A”或”B” |
. | 通配符:与除\n之外的任何单个字符匹配(可以\.匹配真是的符号) | a.e | “nave” |
\w | 与任何单词字符匹配 | \w | “ID A1.3”,匹配”I”,”D”,”A”,”1”,”3” |
\W | 与任何非单词字符匹配 | \W | “ID A1.3”,匹配’ ‘和’.’ |
\s | 与任何空白字符匹配 | \w\s | “ID A1.3”匹配“D “ |
\S | 与任何非空白字符匹配 | \s\S | “int _ctr”匹配“ _” |
\d | 与任何十进制数字匹配 | \d | “4 = IV” |
\D | 与任何非十进制数的字符匹配 | \D | “4 = IV”包括空白字符 |
-
定位点
定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。
断点 | 说明 | 模式 | 匹配 |
^ | 从字符串的开头开始匹配;在多行模式中,必须从该行的开头开始。 | ^\d{3} | "901-333-" 中的 "901" |
$ | 匹配必须出现在字符串的末尾,或在字符串末尾的 \n 之前;在多行模式中,必须出现在该行的末尾之前,或在该行末尾的 \n 之前 | -\d{3}$ | "-901-333" 中的 "-333" |
\A | 匹配必须出现在字符串的开头 | \A\d{3} | "901-333-" 中的 "901" |
\Z | 匹配必须出现在字符串的末尾或出现在字符串末尾的 \n 之前。 | -\d{3}\Z | "-901-333" 中的 "-333" |
\z | 匹配必须出现在字符串的末尾 | -\d{3}\z | "-901-333" 中的 "-333" |
\G | 匹配必须在上一个匹配结束的位置进行;如果以前没有匹配项,则从开始进行匹配的字符串中的位置开始。 | \G\(\d\) | "(1)(3)(5)[7](9)" 中的 "(1)"、"(3)" 和 "(5)" |
\b | 匹配必须出现在 \w (字母数字)和 \W (非字母数字)字符之间的边界上。 | \b\w+\s\w+\b | "them theme them them" 中的 "them theme" 和 "them them" |
\B | 匹配不得出现在 \b 边界上。 | \Bend\w*\b | "end sends endure lender" 中的 "ends" 和 "ender" |
-
数量词
限定符指定在输入字符串中必须存在上一个元素(可以是字符、组或字符类)的多少个实例才能出现匹配项
断点 | 说明 | 模式 | 匹配 |
* | 匹配上一个元素零次或多次 | a.*c | "abcbc" 中的 "abcbc" |
+ | 匹配上一个元素一次或多次 | "be+" | "been" 中的 "bee"、"bent" 中的 "be" |
? | 匹配上一个元素零次或一次。 | "rai?" | "rain" 中的 "rai" |
{n} | 匹配上一个元素恰好 n 次 | ",\d{3}" | "1,043.6" 中的 ",043"、"9,876,543,210" 中的 ",876"、",543" 和 ",210" |
{n,m} | 匹配上一个元素至少 n 次,但不多于 m 次 | "\d{3,5}" | "166", "17668" |
*? | 匹配上一个元素零次或多次,但次数尽可能少。 | a.*?c | "abcbc" 中的 "abc" |
+? | 匹配上一个元素一次或多次,但次数尽可能少。 | "be+?" | "been" 中的 "be"、"bent" 中的 "be" |
?? | 匹配上一个元素零次或一次,但次数尽可能少。 | "rai??" | "rain" 中的 "ra" |
{n}? | 匹配前面的元素恰好 n 次 | ",\d{3}?" | "1,043.6" 中的 ",043"、"9,876,543,210" 中的 ",876"、",543" 和 ",210" |
{n,}? | 匹配上一个元素至少 n 次,但次数尽可能少。 | "\d{2,}?" | "166", "29", "1930" |
{ n,m}? | 匹配上一个元素的次数介于 n 和 m 之间,但次数尽可能少。 | "\d{3,5}?" | "166", "17668" |