符号 | 含义 | 例子 | 匹配结果 |
* | 匹配前面的字符、子表达式或括号里的字符0次或多次 | a*b* | aaaaaaaa; aaabbbbb; bbbbbbbb; |
+ | 匹配前面的字符、子表达式或括号里的字符至少1次 | a+b+ | aaaaaaab; aaabbbbb; abbbbbbb;
|
[] | 匹配中括号里的任意字符(相当于“任选一个”) | [A-Z]* | APPLE; CAPITALS; QWERTY; |
() | 表达式编组(在正则表达式的规则里编组会优先运行) | (a*b)* | aaabaab; abaaab; ababaaaaab; |
{m,n} | 匹配前面的字符、子表达式或括号里的字符m到n次(包含m或n) | a{2,3}b{2,3} | aabbb; aaabbb; aabb; |
[^] | 匹配任意一个不在中括号里的字符 | [^A-Z]* | apple; lowercase; qwerty; |
| | 匹配任意一个由竖线分割的字符、子表达式(注意是竖线,不是大写字母I) | b(a|i|e)d | bad; bid; bed |
. | 匹配任意单个字符(包括括号、数字和空格等) | a.d | bad; bzd; b$d; b d |
^ | 指字符串开始位置的字符或子表达式 | ^a | apple; asdf; a; |
\ | 转义字符(把有特殊含义的字符转换成字面形式) | \.\| | .\| |
$ | 经常在正则表达式的末尾,表示“从字符串的末端匹配”。如果不用它,每个正则表达式实际都带着“.*”模式,只会从字符串开头进行匹配。这个符号可以看成是^符号的反义词。 | [A-Z]*[a-z]*$ | ABCabc; zzzyx; Bob; |
?! | “不包含”。这个奇怪的组合通常放在字符或正则表达式前面,表示字符不能出现在目标字符里。这个符号比较难用,毕竟字符通常会在字符串的不同部位出现。如果要在整个字符串中彻底排除某个字符,就加上^和$符号。 | ^((?![A-Z]).)*$ | no-caps-here; $ymb01sa4ef!ne; |
例如经典的识别邮箱地址的表达式:
[A-Za-z0-9\._+]+@[A-Za-z]+\.[com|org|edu|net]