原文地址: https://www.jianshu.com/p/c6b5901b28ca

 

1. 简单的定义:一个<没有宽度>位置,这个位置满足一定条件<断言>

2. 为了方便理解,看下面例子:

正则<用于密码设置>:^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$

  • 说明:匹配8~20位由0-9A-Za-z构成的字符(必须包含数字和字母)

  • 下面解释步骤(index是int表示匹配的下标),从左到右:

  1. ^ 匹配开始(index = 0)

  2. (?![0-9]+$) 这是一个负向零宽断言,不能以<全是数字和结尾>构成结尾的字符,从index=0往后匹配,像123456789这样的就不合法了,而像12345678a, abcdefg可以匹配

  3. (?![a-zA-Z]+$) 这是一个负向零宽断言,不能以<字符和结尾>构成结尾的字符,仍然从index=0往后匹配,零宽断言的特点就是,匹配的位置不会被消费,index不会往后增加(满足条件即可)

  4. [0-9A-Za-z]{8,20} 如果已经满足前面两个零宽断言,就说明从index=0开始到结束已经满足不全是(0-9),(a-zA-Z)的字符串了,这下再匹配index=0开始到结尾8~20位0-9A-Za-z

  5. $ 匹配结束

posted on 2023-02-16 12:39  睡着的糖葫芦  阅读(28)  评论(0编辑  收藏  举报