正则表达式(\w)((?=\1\1\1)(\1))+到底怎么理解......
真心头大了,看正则教程的时候说(\w)((?=\1\1\1)(\1))+,说是能匹配n位连续相同数字的前n-2位,这怎么理解的?下面这个表达式是能匹配N位连续数字的前N-...
真心头大了,看正则教程的时候说(\w)((?=\1\1\1)(\1))+,说是能匹配n位连续相同数字的前n-2位,这怎么理解的?下面这个表达式是能匹配N位连续数字的前N-3位,这能理解,上面那个就理解... 真心头大了,看正则教程的时候说(\w)((?=\1\1\1)(\1))+,说是能匹配n位连续相同数字的前n-2位,这怎么理解的? 下面这个表达式是能匹配N位连续数字的前N-3位,这能理解,上面那个就理解不了(\w)((\1)(?=\1\1\1))+ 展开
展开
展开全部
(\w)表示匹配并捕获一个单词字符,将匹配内容作为第一个捕获组
(?=\1\1\1)这是一个零宽断言+反向引用,表示之后应该紧接着连续出现三次第一个捕获组匹配到的字符串,但这三次匹配不占位置,不会吃掉匹配到的字符,所以叫零宽
(\1)反向引用,表示接下来应该匹配到第一个捕获组中的内容
最后(?=\1\1\1)(\1)用括号()括起来并且跟上一个+号表示这种模式应该至少匹配一次,匹配得越多越好。
例如有字符串aaaaab,匹配过程是:
①指针从第1个字符开始匹配,\w匹配到字符a,捕获组1的内容是a,指针移动到第2个字符位置
②(?=\1\1\1)检查第2个字符开始是否紧跟着三个a,发现成立,但不匹配这三个字符,指针仍然停留在第2个字符位置
③(\1)检查第2个字符是否是a,发现成立,匹配这个字符,指针移动到第3个字符位置
重复②和③,直到其中一者不能匹配为止。返回之前已匹配到的所有字符。最终的匹配结果就是aaa。
(?=\1\1\1)这是一个零宽断言+反向引用,表示之后应该紧接着连续出现三次第一个捕获组匹配到的字符串,但这三次匹配不占位置,不会吃掉匹配到的字符,所以叫零宽
(\1)反向引用,表示接下来应该匹配到第一个捕获组中的内容
最后(?=\1\1\1)(\1)用括号()括起来并且跟上一个+号表示这种模式应该至少匹配一次,匹配得越多越好。
例如有字符串aaaaab,匹配过程是:
①指针从第1个字符开始匹配,\w匹配到字符a,捕获组1的内容是a,指针移动到第2个字符位置
②(?=\1\1\1)检查第2个字符开始是否紧跟着三个a,发现成立,但不匹配这三个字符,指针仍然停留在第2个字符位置
③(\1)检查第2个字符是否是a,发现成立,匹配这个字符,指针移动到第3个字符位置
重复②和③,直到其中一者不能匹配为止。返回之前已匹配到的所有字符。最终的匹配结果就是aaa。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询