特定の文字を除くすべての文字に一致する正しい構文は何ですか?
[A-Z] [a-z]
たとえば、文字と数字以外のすべてに一致させたいと思います[0-9]
。
私は持っている
string.matches("[^[A-Z][a-z][0-9]]")
これは間違っていますか?
はい、そのようにネストする必要はありません[]
。代わりにこれを使用してください:
"[^A-Za-z0-9]"
それはすべて1つの文字クラスです。
文字以外のものと一致させたい場合は、Unicode プロパティを調べる必要があります。
\p{L}
任意の言語の任意の種類の文字です
代わりに大文字の「P」を使用すると、それは否定になるため\P{L}
、文字以外のものと一致します。
\d
または\p{Nd}
数字が一致している
したがって、現代の Unicode スタイルでの式は次のようになります。
否定された文字クラスを使用するか
[^\p{L}\p{Nd}]
または否定されたプロパティ
[\P{L}\P{Nd}]
次のことは、matches()
完全な文字列に対して式を照合するため、式は文字列内の 1 つの文字のみで真になります。したがって、数量詞を追加する必要があります。
string.matches("[^\p{L}\p{Nd}]+")
完全な文字列に非英数字のみが含まれ、少なくとも 1 つ含まれている場合は、true を返します。
string.matches("[^A-Za-z0-9]")
文字列に _ 記号が含まれていないことを確認したい場合は、単に次のようなものを使用します。
Pattern pattern = Pattern.compile("_");
Matcher matcher = Pattern.matcher(stringName);
if(!matcher.find()){
System.out.println("Valid String");
}else{
System.out.println("Invalid String");
}
文字クラスを否定できます:
"[^abc]" // matches any character except a, b, or c (negation).
"[^a-zA-Z0-9]" // matches non-alphanumeric characters.