正则表达式解析
正则表达式解析
- 字符分类
- 元字符
- 特殊字符
- 量词(限定字符)
- 转义字符
- 范围字符
- 语法使用
- 分枝
- 分组
字符分类
元字符
是指那些在正则表达式中具有特殊意义的专用字符,元字符是构成正则表达式的基本元件。
元字符大致分成这几类:表示单个特殊字符的,表示空白符的,表示某个范围的,表示次数的量词,另外还有表示断言的。
特殊字符
常用特殊字符
代码 | 说明 |
---|---|
. | 匹配除换行外任意字符 |
\d | 匹配任意数字 |
\D | 匹配任意非数字 |
\w | 匹配任意字母数字下划线 |
\W | 匹配任意非字母数字下划线 |
\s | 匹配任意空白符或制表符(看不见的字符) |
\S | 匹配任意非空白符或制表符(看得见的字符) |
\b | 匹配单词的开始或者结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
示例演示
\d\w\s
表示匹配第一个字符为数字,第二个字符为字母数字下划线,第三个字符为空格符。例如:12 ,1q ,1_ 。^\d\d\d$
表示匹配三个字符都为数字的字符串,例如:111, 159。
量词(限定字符)
上面我们说到了特殊字符,比如\b
表示匹配任意一个数字,那么如果我们的场景需要匹配多个字符呢,这时候我们就需要限定字符的出现。
常用限定字符
代码 | 说明 |
---|---|
* | 重复0次到多次 |
+ | 重复1次到多次 |
? | 重复0次或1次 |
{n} | 重复n次 |
{n,} | 重复n次到多次 |
{n,m} | 重复n次到m次 |
示例演示
\d*
表示匹配重复0次或多次数字,例如:为空,2222222\d+
表示匹配重复1次或多次数字,例如:1,22,333\d?
表示匹配重复0次或1次数字,例如:为空,5\d{4}
表示匹配重复4次数字,例如:1111,8888\d{2,}
表示匹配重复2次或多次数字,例如:11,5555\d{2,4}
表示匹配重复2次到4次数字,例如:11,555,4444
转义字符
在实际开发中难免会遇到匹配元字符的情况,这个时候我们就需要使用转义字符对字符进行转义。
例如: . * \
这三个就需要转换为\.
\*
\\
范围字符
在正则表达式中,表示范围的符号有三个分类
代码 | 说明 |
---|---|
[…] | 多选一,括号中的任意单个元素 |
[a-z] | 匹配a-z之间的任意单个元素 |
[^ …] | 取反,不包括括号里边的任意单个元素 |
示例演示
[aeiou]
表示任意的元音字母
语法使用
分枝
到此我们已经可以匹配一些东西了,比如手机号\d{11}
,但有些固定电话只有三位数字或者四位数字,这个时候我们可以采用分枝字符。
例如:\d{3}-\d{8}|\d{4}-\d{8}
可以表示不同长度区间的电话号码
分组
字符分组多用于将多个字符重复,主要通过使用小括号()来进行分组。
例如:(\d\w){3}
重复匹配3次(\d\w)
常用用法
代码 | 说明 |
---|---|
(exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name·>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name’exp) |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 |
(?=exp) | 匹配exp前面的位置 |
(?!exp) | 匹配后面跟的不是exp的位置 |
(?<!exp) | 匹配前面不是exp的位置 |
(?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
学了这么多,我们来联系一下叭:
情景:现在我们去某个网站注册用户时候,当设置密码时候,网站会提醒你的密码长度需要在6-12位之间,且匹配规则限制为:密码需要包括数字,大小写字母和特殊字符四种组合,特殊字符需要在~ @ # $ % * _ - + = : , . ?
之间选择;
^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.[~@#S%_\-+=:.?])[A-Za-z0-9~@#S%_\-+=:.?]{6-16}$
^
:表示字符串的开始。
(?=.*[0-9])
:这是一个正向前瞻,确保字符串中至少包含一个数字(0-9)。
(?=.*[a-z])
:同样是一个正向前瞻,确保字符串中至少包含一个小写字母(a-z)。
``(?=.*[A-Z])`:又一个正向前瞻,确保字符串中至少包含一个大写字母(A-Z)。
(?=.[~@#S%_\-+=:.?])
:这个正向前瞻确保字符串中至少包含一个特定的特殊字符。这里的特殊字符包括 ~ @ # S % * _ - + = : , .
和 ?
。
[A-Za-z0-9~@#S%*_\-+=:.?]
:这部分定义了允许的字符集合,包含所有大小写字母、数字和指定的特殊字符。
{6,16}
:指定了字符串的长度必须在8到20个字符之间。
$
:表示字符串的结束