正则表达式限制字符串中任何字符的实例计数

时间:2014-03-07 21:36:44

标签: regex

正则表达式是否可以将字符串中任何字符的实例数限制为5?

例如:abacaada因为角色a的5个实例而失败(或匹配)。

为了澄清,我正在寻找任何角色,而不仅仅是'a'。即没有人物可以重复超过x次。

4 个答案:

答案 0 :(得分:5)

这个正则表达式应该有效:

^(?:(.)(?!(?:.*?\1){4}))*$

工作演示:http://regex101.com/r/nG2dL4

Exlanation

enter image description here

答案 1 :(得分:0)

这似乎适用于我的一些测试(包括你的情况)

(.*a.*){5}

这当然忽略了空白。如果您希望将此约束为特定单词,则可以将正则表达式包装在\b

\b(.*a.*){5}\b

答案 2 :(得分:0)

这对我有用:

(.)(?=(?:.*\1){4})

它与接受的答案非常相似,但使用了积极的前瞻。如果任何特定字符出现至少 5次,它也匹配而不是排除字符串。

对于这个答案和接受的答案,匹配“任何字符”的技巧是使用\1动态地利用第一个捕获组捕获的内容。

答案 3 :(得分:0)

您可以使用此模式检查字符串:

^(?!.*(.)(?:.*\1){4})

模式细节:

^                # start anchor
(?!              # negative lookahead: not followed by
    .*           # zero or more characters
    (.)          # a captured character in group 1
    (?:.*\1){4}  # some character and the captured character repeated 4 times
)