美文网首页
正则-零宽断言

正则-零宽断言

作者: craig_wang | 来源:发表于2017-10-16 15:31 被阅读21次

    这里记录下,我在初学时如何理解零宽断言(初学时,没人指导很容易想不明白)


    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. $ 匹配结束

    相关文章

      网友评论

          本文标题:正则-零宽断言

          本文链接:https://www.haomeiwen.com/subject/vkokuxtx.html