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のどのメソッドが役立つかを見つけました。matches()、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 に答える