一、表达式入门
1.字符组
字符组([])允许匹配一组可能出现的字符。
可以发现[Pp]既可以匹配大写的P也可以匹配小写的p
请你使用字符组匹配Ruby、Rube、ruby、rube。
[Rr]ub[ye]
2.区间
正则表达式引擎在字符组中使用连字符(-)代表区间,依照这个规则,我们可以总结出三点:
- 要匹配任意数字可以使用
[0-9]; - 如果想要匹配所有小写字母,可以写成
[a-z]; - 想要匹配所有大写字母可以写成
[A-Z]。
3.匹配特殊字符
正则表达使用了 - 号代表了区间,但是我们有时候需要匹配的符号就是 -号,该怎么办呢?
这个时候我们需要对-号进行转义操作,即 -。
在正则中使用 `` 就可以进行对特殊符号进行转义,对 - 进行转义就可以表示为 -,即 - 就代表了 - 号本身。
4.匹配字母
[]字符组中可以放多个条件例如,想要匹配数字的小写字母可以这样写:[0-9a-z]
请使用正则表达式匹配字母,规则如下:
- 匹配
a-z的小写字母;[a-z] - 匹配
A-F的大写字母;[A-F]
5.取反
可以通过在字符数组开头使用 ^ 字符实现取反操作,从而可以反转一个字符组(意味着会匹配任何指定字符之外的所有字符)。
n[^e] 的意思就是n后面的字母不能为 e。
二、快捷方式
1.快捷匹配数字和字母
如果想要匹配所有的字母,会使用[A-Za-z],要匹配数字会使用[0-9]
还有没有更简洁的方式呢?
正则表达式引擎提供了一些快捷方式如:\w 可以与任意单词字符匹配。
当我们想要匹配任意数字的时候也可以使用快捷方式\d,d即digit数字的意思,等价于[0-9]。
| 快捷方式 | 描述 |
|---|---|
| \w | 与任意单词字符匹配,任意单词字符表示 [A-Z]、 [a-z]、[0-9]、_ |
| \d | 与任意数字匹配 |
2.匹配空白
\s快捷方式可以匹配空白字符,比如空格,tab、换行等。
3.单词边界
\b 匹配的是单词的边界
\bmaster\b 就仅匹配有边界的master单词。
当然其他类型的数据,比如数字也能匹配:
/\b/d\b/g
4.快捷方式取反
快捷方式也可以取反,例如对于\w的取反为\W,将小写改写成大写即可,其他快捷方式也遵循这个规则。
5.开始和结束
正则表达式中 ^指定的是一个字符串的开始,$指定的是一个字符串的结束。
6.任意字符
.字符代表匹配任何单个字符,它只能出现在方括号以外。
值得注意的是: .字符只有一个不能匹配的字符,也就是换行符(\n),不过要让.字符与换行符匹配也是可以的,以后会讨论。
7.可选字符
有时,我们可能想要匹配一个单词的不同写法,比如color和colour,或者honor与honour。
这个时候我们可以使用 ? 符号指定一个字符、字符组或其他基本单元可选,这意味着正则表达式引擎将会期望该字符出现零次或一次。
/honou?r/g
在这里 u? 表示u是可选的,即可以出现也可以不出现,可以匹配的是 honor 和 honour 。
通过这个案例可以知道?的作用就是匹配它之前的字符0次或1次。
三、匹配多个数据
1.重复
在一个字符组后加上{N} 就可以表示在它之前的字符组出现N次
/d{8}
2.重复区间
可能有时候,我们不知道具体要匹配字符组要重复的次数,比如身份证有15位也有18位的。
这里重复区间就可以出场了,语法:{M,N},M是下界而N是上界。
\d{3,4} 既可以匹配3个数字也可以匹配4个数字,不过当有4个数字的时候,优先匹配的是4个数字,这是因为正则表达式默认是贪婪模式,即尽可能的匹配更多字符,而要使用非贪婪模式,我们要在表达式后面加上 ?号。
3.开闭区间
\d{1,}
闭区间不写即可表示匹配一个或无数个。
速写
还可以使用两个速写字符指定常见的重复情况,可以使用 + 匹配1个到无数个,使用 *代表0个到无数个。
即:+等价于{1,},*等价于{0,}。