正则表达式
Posted 追风逐月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
字符类
字符类与一组字符中的任何一个字符匹配。
. | 通配符:与除 \n 之外的任何单个字符匹配。 若要匹配原意句点字符(. 或 \u002E),您必须在该字符前面加上转义符 (\.)。 |
a.e | "have" 中的 "ave", "mate" 中的 "ate" |
\w | 与任何单词字符匹配。 | \w | "Room#1" 中的 "R"、 "o"、 "m" 和 "1" |
\W | 与任何非单词字符匹配。 | \W | "Room#1" 中的 "#" |
\s | 与任何空白字符匹配。 | \w\s | "ID A1.3" 中的 "D " |
\S | 与任何非空白字符匹配。 | \s\S | "int __ctr" 中的 " _" |
\d | 与任何十进制数字匹配。 | \d | "4 = IV" 中的 "4" |
\D | 匹配不是十进制数的任意字符。 | \D | "4 = IV" 中的 " "、 "="、 " "、 "I" 和 "V" |
限定符
限定符指定在输入字符串中必须存在上一个元素(可以是字符、组或字符类)的多少个实例才能出现匹配项。 限定符包括下表中列出的语言元素。
限定符 | 描述 | 模式 | 匹配 |
---|---|---|---|
* | 匹配上一个元素零次或多次。 | \d*\.\d | ".0"、 "19.9"、 "219.9" |
+ | 匹配上一个元素一次或多次。 | "be+" | "been" 中的 "bee", "bent" 中的 "be" |
? | 匹配上一个元素零次或一次。 | "rai?n" | "ran"、 "rain" |
{ 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", "193024" 中的 "19302" |
*? | 匹配上一个元素零次或多次,但次数尽可能少。 | \d*?\.\d | ".0"、 "19.9"、 "219.9" |
+? | 匹配上一个元素一次或多次,但次数尽可能少。 | "be+?" | "been" 中的 "be", "bent" 中的 "be" |
?? | 匹配上一个元素零次或一次,但次数尽可能少。 | "rai??n" | "ran"、 "rain" |
{ 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", "193024" 中的 "193" 和 "024" |
特殊字符
所谓特殊字符,就是一些有特殊含义的字符,如上面说的"*.txt"中的*,简单的说就是表示任何字符串的意思。如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls \*.txt。
特别字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n‘ 或 ‘\r‘。要匹配 $ 字符本身,请使用 \$。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。 |
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 |
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 |
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。 |
[ | 标记一个中括号表达式的开始。要匹配 [,请使用 \[。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n‘ 匹配字符 ‘n‘。‘\n‘ 匹配换行符。序列 ‘\\‘ 匹配 "\",而 ‘\(‘ 则匹配 "("。 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。 |
{ | 标记限定符表达式的开始。要匹配 {,请使用 \{。 |
| | 指明两项之间的一个选择。要匹配 |,请使用 \|。 |
定位点
定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。
断言 | 描述 | 模式 | 匹配 |
---|---|---|---|
^ | 匹配必须从字符串或一行的开头开始。 | ^\d{3} | "567-777-" 中的 "567" |
$ | 匹配必须出现在字符串的末尾或出现在行或字符串末尾的 \n 之前。 | -\d{4}$ | "8-12-2012" 中的 "-2012" |
\A | 匹配必须出现在字符串的开头。 | \A\w{4} | "Code-007-" 中的 "Code" |
\Z | 匹配必须出现在字符串的末尾或出现在字符串末尾的\n 之前。 | -\d{3}\Z | "Bond-901-007" 中的 "-007" |
\z | 匹配必须出现在字符串的末尾。 | -\d{3}\z | "-901-333" 中的 "-333" |
\G | 匹配必须出现在上一个匹配结束的地方。 | \\G\(\d\) | "(1)(3)(5)[7](9)" 中的 "(1)"、 "(3)" 和 "(5)" |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。 | er\b | 匹配"never"中的"er",但不能匹配"verb"中的"er"。 |
\B | 匹配非单词边界。 | er\B | 匹配"verb"中的"er",但不能匹配"never"中的"er"。 |
正则表达式验证工具:http://tool.chinaz.com/regex
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章