语法 |
说明 |
表达式实例 |
匹配字符串 |
字符 |
|||
. | 匹配除换行"\n"外的任意字符串 | abc | abc |
\ | 转义字符,使后一个字符改变原来的意思 | a\\c | a\c |
[...] | 字符集,对应的位置可以是字符集中任意字符,字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是^则表示取反,如[^abc]表示不是abc中的其他字符。所有的特殊的字符在字符集中都失去其原有的特殊含义。在字符集中使用^、]或-,可以使用转义字符匹配它们 | a[bcd]e |
abe ace ade |
预定义字符集 |
|||
\d | 数字:[0-9] | a\dc | a1c |
\D | 非数字:[^0-9] | a\Dc | abc |
\s | 空白字符:[<空格>\t\r\n\f\v] | a\sc | a c |
\S | 非空白字符:[^\s] | a\Sc | abc |
\w | 单词字符:[a-zA-z0-9_] | a\wc | abc |
\W | 非单词字符:[^\w] | a\Wc | a c |
数量词 |
|||
* | 匹配一个字符串0或无限次 | abc* |
ab abc abccc |
+ | 匹配一个字符串1次或无限次 | abc+ |
abc abccc |
? | 匹配一个字符串0次或1次 |
abc? |
ab abc |
{m} | 匹配一个字符串m次 | abc{2} | abcc |
{m,n} | 匹配一个字符串m到n次 | abc{2,3} |
abcc abccc |
边界匹配 |
|||
^ | 匹配字符串开头 | ^abc | abc |
$ | 匹配字符串末尾 | abc$ | abc |
\A | 匹配字符串开始 | \Aabc | abc |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 | abc\Z | abc |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 | ||
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 | ||
逻辑分组 |
|||
| | 匹配|表达式左右的任意一个 | abc|def |
abc def |
(...) | 作为分组,每遇到一个(,分组编号加1,使用分组的好处是匹配的子串会保存到一个子组,便于以后使用 | (abc){2} | abcabc |
(?P<name>...) | 分组除原有编号外,再加一个别名 | (?P<id>abc){2} | abcabc |
\<number> | 引用编号为number的分组匹配到的字符串 | (\d)ab\1 |
1ab1 5ab5 |
(?P=name) | 应用别名为name的分组匹配到的字符串 | (?P<id>abc)ee(?P=name) | abceeabc |
特殊构造(不分组) |
|||
(?:...) | (...)的不分组版本,用于|或后接数量词 | (?:abc){2} | abcabc |
(?iLmsux) | iLmsux中的每个字符代表正则表达式的一种匹配模式,只能用在正则表达式开头,可选多个 | (?i)abc | AbC |
(?#...) | 将#后面的字符当做注释忽略 | abc(?#comment)def | abcdef |
(?=...) | 之后的字符串表达式需要匹配才能成功,不消耗字符串内容 | a(?=\d) | 后面是数字的a |
(?!...) | 之后的字符串表达式需要不匹配才能成功,不消耗字符串内容 | a(?!\d) | 后面不是数字的a |
(?<=...) | 之前的字符串表达式需要匹配才能成功,不消耗字符串内容 | (?<=\d)a |
前面是数字的a |
(?<!...) | 之前的字符串表达式需要不匹配才能成功,不消耗字符串内容 | (?<!\d)a | 前面不是数字的a |
(?(id/name)yes_ pattern|no_parttern) |
如果匹配到分组为id或别名name的字符串成功匹配,则需要匹配yes_pattern 不成功,怎需要匹配no_pattern |
(\d)abc(?(1)\d|def) |
1abc3 abcdef |