TIP
正则分组与断言
(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{6,12}
密码由6-12个字符组成,需包含字母、字符和数字。对于这个正则,不理解呀
- 先行断言
- (?=X) 字符串后面紧跟着X才能匹配,如:字符串
hello world
, 要匹配world
中的l
正则/l(?=d)/
- (?!X) 字符串后面不能跟着X才能匹配,如:要求同上,正则
/l(?=(l|d))/
- (?=X) 字符串后面紧跟着X才能匹配,如:字符串
- 后行断言
- (?<=X) 字符串前必须为X才能匹配,如:要求同上,正则
/(?<=r)l/
- (?<!X) 字符串前必须不为X才能匹配,如:要求同上,正则
/(?<!(l|e))l/
- (?<=X) 字符串前必须为X才能匹配,如:要求同上,正则
括号是分组,本身会参与匹配。但里面加了断言,就成为了查找条件,本身不参与匹配了。
(?=.*[0-9])
条件-任意字符后面跟着一个数字
(?=.*[a-zA-Z])
条件-任意字符后面跟着一个字母
(?=.*[^a-zA-Z0-9])
条件-任意字符后面跟着一个非字母数字即字符
.{6,12}
匹配-6到12位任意字符
前三个括号可分开来看,匹配字符串满足三个括号里的条件