其实我是懂的x(?=y)和 x(?!y)的用法,但是我实在看不懂下面这两个正则表达式的工作原理
密码匹配 大小写字母和数字^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$
密码匹配 大小写字母 特殊字符和数字 最小长度8位(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
原网址在这里 http://html5pattern.com/Passwords
额是这样的.看不懂的原因有两个.
1. 在模式x(?=y)和 x(?!=y)里,为啥缺少了x还能匹配?
2. 连续几个(?=y) 合在一起写如何理解?
x(?=y)
和x(?!=y)
缺少了x是不能匹配的,如果你所理解的(我不知道你怎么理解的),但是你为啥怀疑这点来了呢,测试一下便知。(?=.*\d)(?=.*[a-z])(?=.*[A-Z])
可以看成三组正向环视,三组连在一起(顺序不重要)都是在匹配右边的位置,如果是x(?=y)
这种形式的话,我们说如果x匹配到了,正则表达式继续向右匹配(如果引擎是这样传送要被匹配的字符的,暂不论DFA和NFA了),但是(?=y)
只是查看右边是不是有y,如果再来一组(?=z)
其实也是在考察x的右边位置。第一个正则表达式表示必须含有一个数字,一个小写字母,一个大写字母并且不能含有空白字符
第二个同理