前言
正则表达式在日常开发过程中也使用了很多次,可是每次都是很碎片化的学习和使用,功能完成后就没有具体深入学习了,再次用10分钟时间快速入门查阅。
正文
很多人刚入门的时候,看到正则表达式带有很多的括号,就头晕了,其实正则的符号很简单,无非是括号
和符号
和字符
三者组合在一起罢了,相信学过编程的人都很熟悉这种模式
括号
[] 中括号
中括号主要作用就是起到匹配多种不同字符
的功能,例如有一字符串
test123.txt
Reg: t
Reg: test
Reg: [test]
{} 大括号 限定符
大括号的作用就更清晰了,就是跟在某个元字符后面,表明字符要匹配的数量
Reg: t{0,1}
() 小括号 子串
小括号可以抽象的理解成把小括号中的内容当成一个字符来进行正则匹配
Reg: (te){0,1}
其他
其实了解完括号体系后,我觉着理解正则表达式已经不难了,剩下的就是一些固定符号的含义的查找,那么在此全部列出来,以供查询:
字符类
字符 | 描述 |
---|---|
[ABC] | 匹配 [...] 中的所有字符 |
[^ABC] | 匹配除了 [...] 中字符的所有字符 |
[A-Z] | [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。 |
. | 匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r] |
[\s\S] | 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行 |
\w | 匹配字母、数字、下划线。等价于 [A-Za-z0-9_] |
限定符类
字符 | 描述 |
---|---|
* | 匹配前面的子表达式零次或多次,* 等价于 {0,}。 |
+ | 匹配前面的子表达式一次或多次, 等价于 {1,}。 |
? | 匹配前面的子表达式零次或一次,等价于 {0,1} |
{n} | 匹配确定的 n 次 |
{n,} | 至少匹配n 次 |
{n,m} | n <= m,最少匹配 n 次且最多匹配 m 次 |
特殊字符
字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置 |
^ | 匹配输入字符串的开始位置,[]中使用表示排除 |
\ | 转义字符 |
| | 或运算 |
例子
好的,基本的知识介绍完了,直接上例子
用户名匹配
包含字母,数字,下划线 _ ,减号
Reg:
^[a-zA-Z0-9_-]{4,16}$
解析
^ [a-zA-Z0-9_-] {4,16} $
表示开始字符 匹配字母数字下划线横线 长度限定4-16 结束
密码强度
最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
Reg:
^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$
分析,其实这里类似于条件查询中的 AND 查询,但是正则表达式中没有能够表示 AND(和)的运算符,因此这里我们使用 ?=
,借助 .*
符号,来完成 AND 运算符的效果
这里引入一个新的符号,选择运算符
选择符号
字符 | 描述 |
---|---|
?= | exp1(?=exp2):查找 exp1 在exp2前面 |
?<= | (?<=exp2)exp1:查找 exp2 后面的 exp1。 |
?! | exp1(?!exp2):查找后面不是 exp2 的 exp1 |
?<! | (?<!exp2)exp1:查找前面不是 exp2 的 exp1 |
解析
这个正则表达式很长,但是没事,我们从后往前看(也可以从前往后看,不影响)
(.*[!@#$%^&*? ]).*$
再拆解
以查找下面的字符为例
1a1?23.
.*$
这里是一个.
字符(匹配所有字符)带上一个*
(限定字符:匹配前面的字符0次或多次)
[!@#$%^&*? ].*$
这时候我们加上[]
中括号的匹配字符,匹配一个特殊符号开始的字符串
(.*[!@#$%^&*? ]).*$
在中括号前加上 .*
完成正则匹配:匹配一个带有特殊符号的字符串
下面我们继续叠加条件
[a-z](?=.*[!@#$%^&*? ]).*$
匹配一个小写字母开头的字符串
.*[a-z](?=.*[!@#$%^&*? ]).*$
我们继续加上通配符,完成正则匹配:匹配一个带有小写字母和
特殊符号的字符串
以此类推,最终完成数字,字符,符号的筛选
总结
这里以我的理解,简短的介绍了一下正则表达式,当然正则的内容远远不止这么多,但只要理解它的设计理念,就可以很好的运用