正则表达式,匹配不超过 n 次

Regex, That Matches No more Than n Occurrences

我试图找到一个正则表达式,它匹配不超过 n 个连续的,比如三个,例如,一个字符的出现;在三个字符的情况下是 "a":
abbaa - 火柴;
ammaaa - 不匹配(三个连续的 a),有一个 "a",但必须丢弃整个表达式,因为三个 "a's"

谢谢。

使用 {m,n} 语法(如果您的环境提供它,它可能会提供。

{m,n} 允许前一个字符出现 mn 次(含)。

示例:

/a{0,3}/ 匹配 a.

的 0 到 3 次

/a{3,}/ 匹配 3 次或更多次。

/a{3}/ 恰好匹配 3 次。

在下面的示例中,我将上述语法与 negative lookaheadnegative lookbehind.

配对

(?<!a)a{0,3}(?!a) 匹配 0 到 3 次出现的 a,其中在这 0-3 次出现之前或之后没有 a

可以指定一个字符,也可以泛化为所有字符。
此外,不确定您是否正在尝试测试或匹配整个字符串,但假设
这是整个字符串。

广义化

^(?:(\w)(?!{2})|\W)+$

已解释

 ^                       # Beginning of string
 (?:                     # Cluster
      ( \w )                  # (1), a word character
      (?! {2} )             # Not 2 more of same in a sequence
   |                        # or,
      \W                      # Not a word character
 )+                      # End Cluster, 1 to many times
 $                       # End of string

您可以用特定字符代替 \w\W
通过替换你想要的。

字符 a 的示例为 a[^a]

^(?:(a)(?!{2})|[^a])+$

或多个 [abc][^abc]

^(?:([abc])(?!{2})|[^abc])+$