正则表达式(\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))+ 展开 展开
 我来答
绍凯文昕月
2020-06-10 · TA获得超过3901个赞
知道大有可为答主
回答量:3182
采纳率:26%
帮助的人:172万
展开全部
(\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。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式