帮忙屡屡这个正则表达式

来源:百度知道 编辑:UC知道 时间:2024/06/21 05:56:15
表达式 "(\w)((?=\1\1\1)(\1))+" 在匹配字符串 "999999999" 时,将可以匹配9个"9"的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分

(以上是教程上的)

让我分析这个正则表达式就不是这样的,
首先我分析
(\w)代表一个任意字符
(?=\1\1\1)代表从(\w)之后有三个和(\w)一样的任意字符
(\1)代表和(\w)一样的任意字符
((?=\1\1\1)(\1))代表4个和(\w)一样的任意字符
+代表至少一个(\w)

也就是说 999999是最基本的最复合的
而且有多少个9都应该匹配,比如9999999999999999999999555555
就应该匹配9999999999999999999999

(以上是我理解的)

很明显我的理解和教程上有冲突

请高人指点迷津

我到底哪理解错了....
(?:(\w)\1)+ 和 ((\w)\1)+
?: 好像是非记录 的意思 但是能匹配的东西好像是一样的

不太理解他的用法

回复1楼:(\w)((?=\1\1)(\1))+匹配8个
(\w)((?=\1\1\1)(\1))+匹配7个

为什么:(\w)((?=\1\1)(\1))+ 不是匹配5个 而是8个

(\w)((?=\1\1\1)(\1))+

\1匹配一对重合的

(\w)((?=\1)(\1))+
匹配全部
(\w)((?=\1\1)(\1))+匹配8个
(\w)((?=\1\1\1)(\1))+匹配7个

(?=\1\1\1)表示同样的3个同样的数据,然后后面跟了个选择器(\1)再次对前面的3个9进行匹配,那么就是剩余的两个了

(\w)((?=\1\1\1)(\1))+

\1匹配一对重合的

(\w)((?=\1)(\1))+
匹配全部
(\w)((?=\1\1)(\1))+匹配8个
(\w)((?=\1\1\1)(\1))+匹配7个

(?=\1\1\1)表示同样的3个同样的数据,然后后面跟了个选择器(\1)再次对前面的3个9进行匹配,那么就是剩余的两个了

122523回答的有误,无论有多少个9

你那个表达式总会有后面两个不匹配
因为后面的(\1)的选择器是(?=\1\1\1)回答的有误,无论有多少个9

你那个表达式总会有后面两个不匹配
因为后面的(\1)的选择器是(?=\1\1\1)

回复楼主
(\w)((?=\1\1)(\1))+ 你总共是9个9,
(?=\1\1)匹配4个非选择,然后后面跟了个(\1)再进行匹配,也就是非4个,所以匹配的是5个

((?=\1\1\1)(\1))这里注意(?=)的用法,这是零宽度正