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

时间:2017-04-02 22:54:09

标签: regex regex-negation

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

谢谢。

2 个答案:

答案 0 :(得分:8)

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

{m,n}允许mn(包括)上一个字符的出现次数。

示例:

/a{0,3}/匹配0到3次a

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

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

在以下示例中,我将上述语法与否定前瞻否定后瞻配对。

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

答案 1 :(得分:2)

您可以指定一个角色,也可以将其概括为所有角色 此外,不确定您是否尝试测试或匹配整个字符串,但假设为 它是整个字符串。

广义

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

解释

 ^                       # Beginning of string
 (?:                     # Cluster
      ( \w )                  # (1), a word character
      (?! \1{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)(?!\1{2})|[^a])+$

或多个,例如[abc][^abc]

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