我想匹配连续重复的不超过3个相同字符的字符串。所以:
是的,为包含连续的字符进行正则表达式匹配会更容易和更简洁,然后在代码中否定它。但是,在这种情况下,这是不可能的。
我想向x个连续的字符打开这个问题,以便它可以扩展到一般情况,使问题和答案更有用。
在这种情况下支持负向前瞻。
要匹配不包含连续重复次数超过3次的字符的字符串:
^((.)\2?(?!\2\2))+$
这个怎么运作:
^ Start of string
(
(.) Match any character (not a new line) and store it for back reference.
\2? Optionally match one more exact copies of that character.
(?! Make sure the upcoming character(s) is/are not the same character.
\2\2 Repeat '\2' for as many times as you need
)
)+ Do ad nauseam
$ End of string
所以,整个表达式中/2
的数量将是你允许连续重复一个角色的次数,而且你不会得到匹配。
EG
^((.)\2?(?!\2\2\2))+$
将匹配连续4次不重复字符的所有字符串。^((.)\2?(?!\2\2\2\2))+$
将匹配连续5次不重复字符的所有字符串。请注意,此解决方案使用负向前瞻,但并非所有正则表达式都支持它。