匹配不包含超过 x 个连续字符的字符串的正则表达式是什么

What is the regex to match a string not containing more than x consecutive characters

我想匹配连续重复的相同字符不超过 3 个的字符串。所以:

是的,做一个包含连续字符的正则表达式匹配,然后在之后的代码中取反会更容易和整洁。但是,在这种情况下这是不可能的。

我想把问题展开成x个连续的字符,这样可以扩展到一般情况,让问答更有用。

在这种情况下支持负前瞻。

要匹配不包含连续重复超过 3 次的字符的字符串:

^((.)?(?!))+$

工作原理:

^            Start of string
(
  (.)        Match any character (not a new line) and store it for back reference.
    ?      Optionally match one more exact copies of that character.
    (?!      Make sure the upcoming character(s) is/are not the same character.
         Repeat '' for as many times as you need
    )
)+           Do ad nauseam
$            End of string

因此,整个表达式中 /2 的数量将是您允许一个字符连续重复的次数,如果再多,您将无法匹配。

例如

  • ^((.)?(?!))+$ 将匹配所有连续重复一个字符不超过 4 次的字符串。

  • ^((.)?(?!))+$ 将匹配所有连续重复一个字符不超过 5 次的字符串。

请注意此解决方案使用了否定先行,但并非所有正则表达式风格都支持它。

对反向引用使用负前瞻:

^(?:(.)(?!))*$

请参阅 live demo 使用您的示例。

(.) 捕获第 1 组中的每个字符,否定前瞻断言接下来的 2 个字符是 not 捕获字符的重复。

我正在回答这个问题:

Is there a regular expression for matching a string that has no more than 2 repeating characters?

它被标记为与此问题完全相同。


相反,取消匹配要快得多

if (!Regex.Match("hello world", @"(.){2}").Success) Console.WriteLine("No dups");