0

如何验证正则表达式的条件:密码不得包含任何紧跟相同字符序列的字符序列。我也有其他条件并且正在使用

(?=.*(..+)\\1)

验证立即序列重复。它正在失败。这段代码对传递的第 3 个和第 4 个字符串返回“true”;我需要它返回false。请帮忙。

String s2[] = {"1newAb", "newAB1", "1234567AaAa", "123456ab3434", "love", "love1"}; 
    boolean b3;
    for(int i=0; i<s2.length; i++){
        b3 = s2[i].matches("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*(..+)\\1).{5,12}$");
        System.out.println("value" + b3);
    }
4

2 回答 2

1

您可以尝试使用负前瞻 (?!.*(.{2,})\\1)

对于那些想知道\\1是什么的人:它代表第 1 组的匹配,在我们的例子中是匹配来自(.{2,})

于 2013-03-14T02:14:52.553 回答
0

根据 Ron 的建议,我发现 java 中的哪些方法有帮助;match()、find() 的工作方式不同。find() 帮助了我。Guido 的建议是分解不同规则的代码。这是我的代码;尚未完善:用于检查使用 (\S+?)\1 的任何序列的重复

String regex = "(\\S+?)\\1";
        String regex2 = "^(?=.*[0-9])(?=.*[a-zA-Z]).{5,12}$";
        p = Pattern.compile(regex);
        for (String str : s2) {
            matcher = p.matcher(str);
           if (matcher.find())
              System.out.println(str + " got repeated: " + matcher.group(1));
           else if(str.matches(regex2))
               System.out.println(str + " Password correct");
           else
               System.out.println(str + " Password incorrect");

        }
于 2013-03-14T02:49:05.597 回答