繁体   English   中英

Regexp:如何匹配没有重复3次字符的字符串?

[英]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的字符组成的字符串
  • 只有没有相同字符序列且长度为3或更长的字符串

然后这个正则表达式应该工作:

^(?:([A-Za-z])(?:(?!\1)|\1(?!\1)))+$

perl中的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM