我希望匹配不包含一行中重复的相同字符中的3个以上的字符串。所以:
是的,如果对包含连续字符的正则表达式进行匹配,然后在随后的代码中否定这一点,就会更容易、更整洁。然而,在这种情况下,这是不可能的。
我想把这个问题扩展到x个连续字符,这样就可以扩展到一般情况下,使问题和答案更加有用。
在这种情况下,支持负前瞻性。
发布于 2016-10-05 19:41:23
使用带反向引用的负前瞻:
^(?:(.)(?!\1\1))*$请参见使用示例的现场演示。
(.)捕获组1中的每个字符,而前面的负面展望表明,接下来的2个字符不会重复捕获的字符。
发布于 2016-10-05 17:01:50
若要匹配不包含连续重复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数将是允许一个字符连续重复的次数,并且不会得到匹配。
例如。
^((.)\2?(?!\2\2\2))+$将匹配不连续重复字符超过4次的所有字符串。^((.)\2?(?!\2\2\2\2))+$将匹配不连续重复字符超过5次的所有字符串。请注意,此解决方案使用的是负面展望,但并非所有regex风格都支持它。
发布于 2019-12-10 22:46:43
我在回答这个问题:
被标记为这个问题的确切副本。
相反,否定比赛要快得多。
if (!Regex.Match("hello world", @"(.)\1{2}").Success) Console.WriteLine("No dups");https://stackoverflow.com/questions/39879853
复制相似问题