正向预搜索:“(?=xxxxx)”
在被匹配的字符串中,它对所处的“缝隙”或者“两头”附加的条件是:所在缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这段话的意思我能理解。
比如“(\w)((\1)(?=\1\1\1))+”将匹配“aaa ffffff 999999999”红色字体部分。我不能立即的是下面这段:
表达式“(\w)((?=\1\1\1)(\1))+”在匹配字符串“aaa ffffff 999999999”时,将可以匹配6个“f”的前4个,可以匹配9个“9”的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。当然,这个表达式可以不这样写,在此的目的是作为演示之用。
这个怎么理解呢?为啥是重复4次以上的字母数字,则匹配其剩下最后2位之前的部分?求释疑。3ks

解决方案 »

  1.   

    你的理解是错误的(\w)((?=\1\1\1)(\1))+首先\w是没有问题的
    ((?=\1\1\1)(\1))+
    这样的正则中 我们拆开来看
    (\1)+
    但是加了一个正向预查
    于是在每次匹配这个\1之前我要做一次预查。比如
    aaaaa
    红色部分是被\w匹配了。
    接下来匹配
    aaaaa
    在这个红色的a之前的位置开始做预查。如果后面有3个a
    那么这个(?=\1\1\1)成立,则aaaaa中的红a匹配
    接下来匹配
    aaaaa
    做预查。(?=\1\1\1)成立,则该字符匹配
    接下来aaaaa
    这个时候预查就不成功了,因为只有2个a了。匹配结束