[英]Regexp: How to match a string that doesn't have any character repeated 3 times?
我正在尝试制作一个验证输入字符串的模式。 验证规则不允许任何字符连续重复3次。
例如:
Aabcddee
- 有效。
Aabcddde
-是无效的,因为3个d chracters的。
目标是提供一个可以匹配上述示例之一的RegExp模式,但不能同时匹配两者。 我知道我可以使用反向引用,如([az])\\1{1,2}
但这只匹配顺序字符。 我的问题是我无法弄清楚如何为此制作单一模式。 我尝试过这个,但我不明白为什么它不起作用:
^(([az])\\1{1,2})+$
在这里,我尝试匹配在内部组中重复1或2次的任何字符,然后如果它重复多次,则匹配该内部组。 但它不是这样的。
谢谢。
要检查字符串是否没有连续3次或更多次的字符(任何类型,甚至是新行):
/^(?!.*(.)\1{2})/s
您还可以检查输入字符串与此正则表达式是否匹配。 在这种情况下,您还可以知道连续重复3次或更多次的字符。 请注意,这与上面的完全相同,只是取消负前瞻(?!pattern)
中的正则表达式。
/^.*(.)\1{2}/s
如果要添加验证,该字符串仅包含[az]
中的字符,并且您认为aaA
无效:
/^(?!.*(.)\1{2})[a-z]+$/i
如您所见, i
标志(不区分大小写)会影响捕获的文本与当前输入的比较方式。
如果要允许空字符串传递,请将+
更改为*
。
如果你想考虑aaA
是有效的,并且你想允许大写和小写:
/^(?!.*(.)\1{2})[A-Za-z]+$/
初看起来,它可能看起来与前一个相同,但由于没有i
标志,所捕获的文本不会受到不区分大小写的匹配。
下面是失败的答案,你可以忽略它,但你可以阅读它的乐趣。
您可以使用此正则表达式来检查字符串是否没有3个重复字符(任何类型,甚至是新行)。
/^(?!.*(.)(?:.*\1){2})/s
您还可以检查输入字符串与此正则表达式是否匹配。 在这种情况下,您还可以知道重复的字符大于或等于3次。 请注意,这与上面的完全相同,只是取消负前瞻(?!pattern)
中的正则表达式。
/^.*(.)(?:.*\1){2}/s
如果要添加验证,该字符串仅包含[az]
中的字符,并且您认为aaA
无效:
/^(?!.*(.)(?:.*\1){2})[a-z]+$/i
如您所见, i
标志(不区分大小写)会影响捕获的文本与当前输入的比较方式。
如果你想考虑aaA
是有效的,并且你想允许大写和小写:
/^(?!.*(.)(?:.*\1){2})[A-Za-z]+$/
初看起来,它可能看起来与前一个相同,但由于没有i
标志,所捕获的文本不会受到不区分大小写的匹配。
从你的问题我得到你想要匹配
[A-Za-z]
AND的字符组成的字符串 然后这个正则表达式应该工作:
^(?:([A-Za-z])(?:(?!\1)|\1(?!\1)))+$
( perl中的示例 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.