2012-02-13 750 views
-1

如何在单个正则表达式中表达这些规则?正则表达式不允许连续重复相同的字符

  1. 比一个字符的两个重复更是无效的下面相互字符
  2. 两个重复直接无效(aabcc是有效的,oott不是)
+4

这些日子里人们很快就会失望,他们并没有削减你对新人的任何懈怠。总是试图至少尝试一次,如果你不能得到它,然后张贴你试过的东西,人们会帮助你纠正错误,或者指引你朝着更好的方向发展。 – Brian 2012-02-13 14:53:04

回答

0

您可以使用/([a-z])\1/gi检查重复的字符,然后检查匹配的数量。如果它大于1,则有多个重复字符。

+0

这不区分'aabcc'和'oott'。 – 2012-02-13 15:58:02

1

有趣的问题,你不给你的语言,但假设它支持向前看符号,你可以试试这个:

^(?!.*(.)\1{2})(?!.*(.)\2(.)\3).+$ 

看到它here on Regexr

有两个部分,第一部分^.+$任何比赛字符从字符串开始直到结尾,因为+至少需要一个字符。

第二部分是否定的lookaheads。他们定义了一组规则,完整的正则表达式只要其中一个匹配就会失败。

(?!.*(.)\1{2})在连续3个相等的字符上失败。

(?!.*(.)\2(.)\3)失败上第二个条件“字符的两个重复以下彼此直接地”

\1(23)反向引用到前括号内的部分。

+0

+1(当然,除了Regexr上的可视化,你实际上并不需要'。+ $'部分)。 – 2012-02-13 16:01:04

相关问题