【发布时间】:2013-01-17 09:03:08
【问题描述】:
我正在尝试制作一个可以验证输入字符串的模式。验证规则不允许任何字符连续重复超过 3 次。
例如:
Aabcddee - 有效。
Aabcddde - 无效有效,因为有 3 个 d 个字符。
我们的目标是提供一个可以匹配上述示例之一的 RegExp 模式,但不能同时匹配两者。我知道我可以使用诸如([a-z])\1{1,2} 之类的反向引用,但这仅匹配连续字符。我的问题是我无法弄清楚如何为此制作单一模式。我试过这个,但我不太明白为什么它不起作用:
^(([a-z])\1{1,2})+$
在这里,我尝试匹配内部组中重复 1 或 2 次的任何字符,然后如果重复多次,则匹配该内部组。但它不是那样工作的。
谢谢。
【问题讨论】:
-
你使用什么语言?
-
PCRE RegExp 风格,用于 PHP。
-
我真的不明白为什么
/^([a-z])\1{1,2}$/i匹配aaa。字符串长度为 3 个字符,比量化的反向引用长。 -
@Aleksandr [a-z]\1{1,2} 匹配 2 或 3 个字符([a-z] 加上相同字符 1 或 2 次)。
-
正如@Placido 指出的那样,
([a-z])\1{2}将匹配 3 个重复的字符,因此这可能是您要查找的正则表达式:如果字符串与此模式匹配,则它是无效。
标签: regex pcre backreference