下面列举了一些常用的正则表达式,仅仅是为了方便记忆和查找:
1.首先是元字符,究竟什么是元字符呢?大家就把它理解成是正则表达式的关键字吧,它代表的不是符号本身。
例如:0/d{2,3}-/d{7,8}表示电话号码,前面以0开头的3到4位数字,中间是-,后面7到8位数字.这里面0代表的就是数字0,而/d是元字符代表的是一位数字,-代表的也是本身。
常用的元字符如下表:
字符 | 说明 |
. | 除了换行外的任意的字符 |
/b | 单词的开始或结束(是一个位置) |
/d | 一个数字 |
/w | 匹配字母、数字、下划线、汉字 |
/s | 匹配空白符号 |
^ | 字符串的开始 |
$ | 字符串的结束 |
2.转义字符/
既然想.本身是不代表.的那么我要是想匹配.怎么办?那就要用到转义字符/
例如/.就匹配.
3.重复
如果说你想匹配连续5个数字怎么办,写五个/d太麻烦了吧,事实上我们肯定不会那么做?我们可以使用/d{5}.
常用的表重复的符号如下表:
字符 | 说明 |
* | 重复0到多次 |
+ | 重复1到多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n, | 重复n到多次 |
{n,m} | 重复n到m次 |
4.字符类[]
如何表示abcd中的任何一个呢,可以用:[abcd]表示任意一个,不仅可以这样还可以用类似[0-9]表示0到9直接的任意的数字。
5.分支条件|
如果你要表示固定电话或者手机号码,因为固定电话是0/d{3,4}-/d{7,8}而手机号码是/d{13}。怎么办,这是可以用分支0/d{3,4}-/d{7,8}|/d{13}。用|分开,表示要么匹配前面类型要么匹配后面类型。
6.分组()
上面说过重复一个字符0次、一次或多次,那么如何重复多个字符呢,就是我们要说的分组,例如要匹配一段IP地址(简单的IP匹配):(/d{1,3}/.){3}/d{1,3}.其中()括起来的部分重复3次。
7.反义
上面说过匹配数字/d,那么如果想要匹配除了数字意外的字符呢?你可以使用/D.这就是要说的反义。
常用的反义:
字符 | 说明 |
/B | 匹配不是单词的开始或结束位置 |
/D | 不是数字的字符 |
/W | 除字母、数字、汉字、下划线意外的字符 |
/S | 不是空白字符的字符 |
[^x] | 除了x以外的字符 |
[^abcd] | 除了abcd以外的字符 |
8.断言
如果我们匹配一个以ch结尾的单词的前半部分怎么办?可以:/b/w+(?=ch/b).这个断言是出现在自身的后面叫零宽度正预测先行断言。要是匹配以wr开头单词的后半部分就可以是:(?=/bwr)/w+/b,这个叫零宽度正回顾后发断言。如果仅仅就是确保没有出现而不用去匹配,例如/d{5}(?!/d)就是匹配5个数字而且其后面不能再是数字,这种叫零宽度负预测先行断言;同样还有零宽度负回顾后发断言,例如(?<![a-z])/d前面不是小写字母的一个数字。
9.懒惰限定符?
如果有a.*b正则表达式,有字符accccbccb去匹配,达到的是accccbccb还是accccb呢?答案是前者,会找最长的。但是有时我们不希望这样,就可以使用懒惰限定符。比如上面的正则表达式可以这样a.*?b就可以解决问题了。
常用的有
字符 | 说明 |
*? | 重复0到多次,但尽可能少的重复 |
+? | 重复1到多次,但尽可能少的重复 |
?? | 重复0到一次,但尽可能少的重复 |
{n,m}? | 重复n到m次,但尽可能少的重复 |
{n}? | 重复n到多次,但尽可能少的重复 |