これが私の現在のコードです:
return str.matches("^[A-Za-z\\-'. ]+");
国際文字を含めたい。Javaでそれを行うにはどうすればよいですか?
ありがとう。
これが私の現在のコードです:
return str.matches("^[A-Za-z\\-'. ]+");
国際文字を含めたい。Javaでそれを行うにはどうすればよいですか?
ありがとう。
英字をすべて一致させたいのだそうです。通常、Posix\p{Alpha}
式を使用してこれを行い、許可したい句読点で拡張します。Java 正規表現のドキュメントにあるように、ASCII のみに一致します。
ただし、ドキュメントに明確に記載されていないのは、このクラスを Unicode 文字で動作させることができるということです。そのためには、 Unicode 文字クラスマッチングをオンにする必要があります。
これは、次の 2 つの方法のいずれかで実行できます。
Pattern
を渡すオブジェクトを作成することにより:UNICODE_CHARACTER_CLASS
Pattern p = Pattern.compile("^[p{Alpha}\\-'. ]+", UNICODE_CHARACTER_CLASS);
(?U)
埋め込みパターン フラグを使用する場合:str.matches("^(?U)[\\p{Alpha}\\-'. ]+");
概念実証:
String[] test = {"Jean-Marie Le'Blanc", "Żółć", "Ὀδυσσεύς", "原田雅彦"};
for (String str : test) {
System.out.print(str.matches("^(?U)[\\p{Alpha}\\-'. ]+") + " ");
}
明らかな結果は次のとおりです。
真 真 真 真
すべてが正しいと思われる場合は、次の 2 つの点を追加してください。
ASCII文字AZ以外の英数字と一致させたいと思います。\p{IsAlphabetic}
これは、 Unicode文字クラスを使用して行うことができます。
return str.matches("^[\\p{IsAlphabetic}\\-'. ]+");
完全なドキュメントには、さらに多くのUnicode文字クラスがあります。
パターンを次のように置き換えます。
"^[\\p{L}\\-'. ]+"
\p{L}
すべてのユニコード文字が含まれます。
正規表現を使用して\P{L}
任意の文字 (国内または国際) と一致させます
を追加する[\p{L}&&[^\p{IsLatin}]]
と、ラテン語以外のすべての文字に一致させることができます。
特にギリシャ語の場合、正規表現は\p{InGreek}
ギリシャ文字と一致する必要があり\P{InGreek}
(違いは大文字の P)、ギリシャ語以外の文字と一致する必要があります。
「国際文字」の意味を言わない限り、質問に完全に答えることはできませんが、一般的な解決策は、\p{name}
構文を介して名前付き文字クラスを使用することです。多くの名前付き文字クラスがあります。正規表現言語によって定義されているものもあれば、Unicode 標準によって定義されているものもあります。部分的なリストについては、 Pattern javadocsを参照し、関連する Unicode 標準を参照してください。