1
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(Pattern.matches("[^A-Za-z0-9]","@#%abc"));
}

これは、Javaの正規表現に関する非常に単純なコードです。

私の知る限り、[^ A-Za-z0-9]は特殊文字と一致するとtrueを返すはずです。これは、[^は否定を意味し、A-Za-z0-9は数字を含むすべての文字を意味するためです。上記のコードがtrueではなくfalseを返し続ける理由がわかりません。

4

2 に答える 2

2

+ を追加します。

System.out.println(Pattern.matches("[^A-Za-z0-9]+.*","@#%abc"));
// no, this will only match the first few characters,
// added wildcard to catch the rest

Pattern.matches()つまり、パターン全体がテキストの最初から最後まで一致します。あなたの場合、find() を実行しています。つまり、パターンが 1 文字のみに一致するため、テキスト内にパターンの複数の一致がありますが、完全な一致は 1 つではありません。

于 2012-07-09T09:47:17.183 に答える
2

あなたのマッチは1文字だけをマッチさせようとしています。

代わりに、最初の文字と気にしない残りの文字を示すように、一致を再構成する必要があります。

Pattern.matches("[^A-Za-z0-9].*","@#%abc")

最初の文字の一致の後の.*に注意してください。

于 2012-07-09T09:49:21.963 に答える