我正在尝试创建一个正则表达式,它匹配重复出现三次或更多次的两个或多个字符(不包括单个重复字符)。
(.)\1{3,}
只会匹配单个重复字符,例如匹配 aaaa
,但不匹配 ababab
或 abcde
。
(.+)\1{3,}
会匹配一个重复的模式,例如 aaa
、ababab
、ab ab ab
,但不匹配 abcde
。
我只想匹配 ababab
、ab ab ab
等,但不匹配 aaaa
或 abcde
。
如何解决这个问题?
我正在尝试创建一个正则表达式,它匹配重复出现三次或更多次的两个或多个字符(不包括单个重复字符)。
(.)\1{3,}
只会匹配单个重复字符,例如匹配 aaaa
,但不匹配 ababab
或 abcde
。
(.+)\1{3,}
会匹配一个重复的模式,例如 aaa
、ababab
、ab ab ab
,但不匹配 abcde
。
我只想匹配 ababab
、ab ab ab
等,但不匹配 aaaa
或 abcde
。
如何解决这个问题?
如果您想在所有字符相同的情况下放弃匹配,可以使用负向先行断言来拒绝。否则,您可以将量词中的+
更改为{2,}
,以捕获第一部分,然后使用{2,}
,使匹配的第一部分重复三次或更多次。您可以使用以下正则表达式:
^(?!(.)\1+$)(.{2,})\2{2,}$
解释:
^
- 字符串的开头(?!(.)\1+$)
- 这个负向先行断言确保如果字符串一直到结尾只包含一个字符,则拒绝匹配。(.{2,})
- 匹配两个或更多任意字符,并在组2中捕获它\2{2,}
- 重复在组2中捕获的内容两次或更多次$
- 字符串的结尾此外,根据您的帖子,您不想匹配aaaa
,因为它只重复了aa
模式两次而不是三次或更多次,所以如果我理解正确并且您认为aaaaaa
是一个成功的匹配,因为现在它有aa
重复三次,那么您可以从我的上面的正则表达式中去掉负向先行断言,并使用这个正则表达式,它将不匹配aaaa
,但会像我上面解释的那样匹配aaaaaa
。
^(.{2,})\1{2,}$
如果这确实是您想要的,请告诉我。如果有任何疑问,请随时留下您的评论。
aaaaaa
,因为它只包含单个字符。 - ToeNail
^((.)\2*?(?!\2).+?)\1{2,}$
< p > 第一部分 ((.)\2*?(?!\2).+?)
匹配至少有两个不同字符的字符串,然后将其重复至少两次\1{2,}
。
将第一部分分解,首先匹配第一个字符,将其放入第二组中。然后我们允许该字符重复几次,或者不重复 (\2*
)。然后我们断言必须有其他不同于此字符的东西(?!\2)
。然后我们懒惰地匹配剩下的部分.+?
。
aaaaaaaa
。 - revoaa
。他没有将其排除在外。 - ALFA
aabaabaab
会被认为是匹配吗? - Tim Biegeleisenaabaabaab
是匹配的,因为字符串aab
重复出现。 - ToeNail