正则字符串
正则字符串:就是任意可以用一系列线性规则构成的字符串。
例如:
aabbbbb(cc)(d| )
将其分解为
- aa*:a后面跟着的a*表示“重复任意次a,包括0次”,这样就可以保证字母a至少出现一次。
- bbbbb:没啥特别,5次b
- (cc)*表示有任意次两个c(可以是0次)
- (d|):增加一个竖线在表达式里表示“这个或者那个”。表示最后可以跟着与一个d或者空格
一个典型的利用正则表达式的例子是,邮箱地址
[A-Za-z0-9\._+]+@[A-Za-z]+\.(com|org|net|edu)
其中:
- 邮箱地址的第一部分至少包括一种内容:大写字母,小写字母,数字0-9,点号.加号+或者下划线_:[A-Za-z0-9._+]+:这个表示括号里的任意一个符号都可能出现,后面的+表示这些字符都可以出现多次,且至少出现一次
- @:这很直接
- [A-Za-z]+:符号@后面只能出现字母
- (com|org|net|edu):一般邮箱的后缀是其中四个之一
正则表达式的常用符号
符号 | 含义 | 例 子 | 匹配结果 |
---|---|---|---|
* | 匹配前面的字符,子表达式或者括号里的字符0次或者多次 | ab | aaaa,aabb,aaab,bbbb |
+ | 匹配前面的字符,子表达式或者括号i里的字符至少一次 | a+b+ | aaabb,aabb,ab |
[] | 匹配任意一个字符,相当于任意选择一个 | [A-Z]* | APPLE,CAPTIALS,QWERTY |
() | 表达式编组(在正则表达式的规则里编组会优先运行) | (ab) | aaabaab |
{m,n} | 匹配前面的字符,子表达式或者括号里的字母 m到n次(包括m和n次) | a{2,3}b{2,3} | aabbb,aaabb |
[^] | 匹配任意一个不在中括号里的字符 | [^A-Z]* | apple,lowercase |
| | 匹配任意一个竖线分割的字符 | b(a|i|e)d | bad,bid,bed |
. | 匹配任意单个符号 | b.d | bad,bed |
^ | 指字符串开始位置 的字符或子表达式 | ^a | apple,asdf,a |
\ | 转义字符 | ||
$ | 常用于正则表达式的末尾,表示从字符串末端匹配,如果不用他,每个正则表达式实际上都带着.*模式,只会从字符串开头匹配 | [A-Z]*[a-z]* | ABCabc,zzzyx |
?! | “不包含”。通常放在字符或者正则表达式的前面,表示字符不能出现在目标字符串中,比较难用 |