正则表达式的特点:
- 灵活性、逻辑性和功能性都很强;
- 主要应用对象是文本;
- 可以迅速地用极简单的方式达到字符串的复杂控制;
- 晦涩难懂。
正则表达式基本语法:
- 元字符
字符 | 说明 |
---|---|
. | 匹配除了换行符以外的任意单个字符 |
\d | 匹配数字 |
\D | 匹配非数字 |
\w | 匹配字母,数字,下划线 |
\W | 匹配任意不是字母,数字,下划线的字符 |
\s | 匹配任意空白字符(\r,\n,\t,空格) |
\S | 匹配任意非空白字符 |
\b | 匹配单词的边界(开始或者结束) |
\B | 匹配非单词边界 |
\n | 匹配换行符 |
\t | 匹配制表符 |
| | 将两个匹配条件进行逻辑“或”(or)运算 |
a|b | 匹配a或者b |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
- 修饰符
字符 | 说明 |
---|---|
i | ignore - 不区分大小写 |
g | 全局匹配 |
m | Multiline- 多行匹配,边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾 |
s | 特殊字符圆点 . 中包含换行符 \n |
- 分组符
字符 | 说明 |
---|---|
[xyz] | 匹配字符集中任意一个字符 |
[^xyz] | 匹配非字符集中任意一个字符 |
[a-z] | 指定匹配范围,[a-z]匹配任意一个小写字母 |
[^a-z] | 匹配任意一个非小写英文字母的字符 |
[0-9] | 匹配任意一个数字 同等于\d |
[^0-9] | 匹配任意非数字 |
[0-9a-zA-Z_] | 匹配字母、数字、下划线,同等于\w |
() | 组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理 |
- 量词
字符 | 说明 |
---|---|
?? | 重复零次或一次,但尽可能少的重复 |
+? | 重复一次或者多次,但尽可能少的重复 |
*? | 重复任意次,但尽可能少的重复 |
* | 重复零次或任意多次 |
{n} | 重复n次 |
{m, n}? | 重复m-n次,但尽可能少的重复 |
{m,}? | 重复m次以上,但尽可能少的重复 |
- 贪婪匹配和懒惰匹配
贪婪匹配:匹配尽可能多的字符。
懒惰匹配:匹配尽可能少的字符。限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?,如*属于贪婪匹配,*?属于懒惰就加载。 - 常见表达式
(1)匹配双字节字符(包括汉字在内)
[^\x00-\xff]
(2)匹配中国邮政编码
[1-9]\d{5}(?!\d)
(3)匹配手机号码(包含虚拟号码和新号码段)
^1([38][0-9]|4[5-9]|5[0-3,5-9]|66|7[0-8]|9[89])[0-9]{8}$
(4)身份证号码
15位:\d{14}[[0-9],0-9xX]
18位:\d{17}(\d|X|x)
综合:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|x|X)$)
(5)Email地址
^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
(6)匹配双字节字符(包括汉字在内)
[^\x00-\xff]
(7)匹配ip地址
([1-9]{1,3}\.){3}[1-9]
(8)强密码(>8位字符,且必须包含大写字母、小写字母、数字、特殊字符)
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$