0

の文字列があり、数値または文字ではない 1 つ以上の文字が含まれ"abc123("ているかどうかを確認したいと考えています。

"abc123(".matches("[^a-zA-Z0-9]+");この場合、true を返す必要がありますか? しかし、そうではありません!どうしたの?

私のテストスクリプト:

public class NewClass {
    public static void main(String[] args) {
        if ("abc123(".matches("[^a-zA-Z0-9]+")) {
            System.out.println("true");
        }
    }
}
4

3 に答える 3

5

Java では、式は文字列の一部だけでなく、文字列全体に一致する必要があります。

myString.matches("regex") は、文字列が正規表現によって完全に一致するかどうかに応じて、true または false を返します。String.matches() は、文字列全体が一致する場合にのみ true を返すことに注意してください。つまり、「正規表現」は、文字列アンカーの開始と終了で「^regex$」を記述したかのように適用されます。ソース

あなたの式は、文字列全体ではなく、文字列の一部を探しています。式を に変更する.*YOUR_EXPRESSION.*と、文字列全体に一致するように展開されます。

于 2012-07-13T14:00:15.277 に答える
4

文字と数字だけではなく、それ以外が含まれていないかチェックしてみませんか?not 単語グループ (\W) を使用できます。それが true を返した場合、文字列に探している文字以外の何かが含まれていることがわかります。

"abc123(".matches("[\W]");

これが true を返す場合は、単語の文字と数字以外のものがあります。

于 2012-07-13T13:57:18.600 に答える
2

[^A-Za-z0-9]+は「文字や数字ではない」ことを意味します。^[A-Za-z0-9]+$おそらく、 「文字または数字のみ」を意味するものに置き換えたいと思うでしょう。

于 2012-07-13T13:57:46.577 に答える