需要使用RegEx防止重复字符

时间:2014-12-17 04:44:29

标签: regex string match string-matching

如何使用RegEx测试以下模式:

  1. 字符串长度必须为4-10个字符
  2. 字符串不能有任何重复 字符(没有两个字符可以相同并且彼此相邻)
  3. 我研究了这个,我认为我很接近:

    ^(?!(.)\1).{4,10}$
    

    这将正确找到ab1212ab的匹配项。它还会正确拒绝1111aaaa。但是,它错误地接受了12aaab11

    似乎只查找字符串开头的重复字符。我试图移动或移除^$,但我需要它们进行最大字符检查。我还尝试了(.)\1的几种变体来找到没有运气的重复字符。

    任何帮助或提示将不胜感激。

    PS - 如果有人知道答案,我实际上想要允许最多一对重复字符,但我认为这太难了,并决定不允许任何重复的字符。

2 个答案:

答案 0 :(得分:2)

您可以在前瞻断言内的捕获组之前使用贪婪的量词。

.*匹配字符串最后的所有字符。

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

答案 1 :(得分:2)

在我看来,最好的方法是:

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

长字符串失败的原因很快。