1

ユーザーからの入力データを照合し、この入力の一致があるかどうかを検索しようとしています。たとえば、ユーザーが次のように入力した場合: A*B*C* A で始まり、B と B を含むすべての単語を検索したいのですが、このコードを試してみましたが、動作しません:(get output false)

public static void main(String[] args)
    {

        String envVarRegExp = "^A[^\r\n]B[^\r\n]C[^\r\n]";
        Pattern pattern  = Pattern.compile(envVarRegExp);
        Matcher matcher = pattern.matcher("AmBmkdCkk");
        System.out.println(matcher.find());

    }

ありがとう。

4

3 に答える 3

3

ここでは正規表現は必要ありません。単純なStringクラス メソッドが動作します: -

String str = "AfasdBasdfCa";

if (str.startsWith("A") && str.contains("B") && str.contains("C")) {
    System.out.println("true");
}

Bこれは、 andが特定の順序になっていることを保証するものではないことに注意してくださいC。これについては何も言及していないため、必要ないと思います。

それらをある順序にしたい場合(B前に来るようにC、この正規表現を使用します:-

if (str.matches("^A.*B.*C.*$")) {
    System.out.println("true");
}

.を除く任意の文字に一致することに注意してくださいnewline。したがって、 の代わりに使用できます[^\r\n]。より明確です。またはが検出さ*れる前の文字の繰り返しに一致する必要があるため、量指定子を使用する必要があります。BC

また、String.matches完全な文字列に一致するためanchors、末尾に があります。

于 2012-11-26T15:54:43.177 に答える
2

文字クラスに数量詞を追加する必要があります。

String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C[^\r\n]*$";
于 2012-11-26T15:54:04.330 に答える
2

次のように正規表現で修飾子を使用する必要があり*ます(AとBの間、次にBとCの間の0以上の一致の場合):

String envVarRegExp = "^A[^\r\n]*B[^\r\n]*C";

編集:ユーザーが入力にアスタリスクを使用できるユーザーからの入力に取り組んでいるようです*。その場合は、次のことを考慮してください。

String envVarRegExp = userInput.replace("*", ".*?");

次のような文字列はどこuserInputにありますか:

String userInput = "a*b*c*d*e";
于 2012-11-26T15:54:11.987 に答える