5

これが私の現在のコードです:

return str.matches("^[A-Za-z\\-'. ]+");

国際文字を含めたい。Javaでそれを行うにはどうすればよいですか?

ありがとう。

4

5 に答える 5

13

英字をすべて一致させたいのだそうです。通常、Posix\p{Alpha}式を使用してこれを行い、許可したい句読点で拡張します。Java 正規表現のドキュメントにあるように、ASCII のみに一致します。

ただし、ドキュメントに明確に記載されていないのは、このクラスを Unicode 文字で動作させることができるということです。そのためには、 Unicode 文字クラスマッチングをオンにする必要があります。
これは、次の 2 つの方法のいずれかで実行できます。

  1. 定数Patternを渡すオブジェクトを作成することにより:UNICODE_CHARACTER_CLASS
    Pattern p = Pattern.compile("^[p{Alpha}\\-'. ]+", UNICODE_CHARACTER_CLASS);
  2. (?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 つの点を追加してください。

  • 原田雅彦(はらだまさひこ)は漢字で構成されています。実はアルファベットではなく
  • ドット (.) 記号を一致させる必要があります。それは問題ありませんが、表意文字のピリオドも一致させることを検討してください。
于 2013-02-02T13:00:00.700 に答える
3

ASCII文字AZ以外の英数字と一致させたいと思います。\p{IsAlphabetic}これは、 Unicode文字クラスを使用して行うことができます。

return str.matches("^[\\p{IsAlphabetic}\\-'. ]+");

完全なドキュメントには、さらに多くのUnicode文字クラスがあります。

于 2013-01-31T22:52:19.633 に答える
2

パターンを次のように置き換えます。

"^[\\p{L}\\-'. ]+"

\p{L}すべてのユニコード文字が含まれます。

于 2013-01-31T22:59:45.310 に答える
2

正規表現を使用して\P{L}任意の文字 (国内または国際) と一致させます

を追加する[\p{L}&&[^\p{IsLatin}]]と、ラテン語以外のすべての文字に一致させることができます。

特にギリシャ語の場合、正規表現は\p{InGreek}ギリシャ文字と一致する必要があり\P{InGreek}(違いは大文字の P)、ギリシャ語以外の文字と一致する必要があります。

于 2016-07-22T09:22:58.643 に答える
0

「国際文字」の意味を言わない限り、質問に完全に答えることはできませんが、一般的な解決策は、\p{name}構文を介して名前付き文字クラスを使用することです。多くの名前付き文字クラスがあります。正規表現言語によって定義されているものもあれば、Unicode 標準によって定義されているものもあります。部分的なリストについては、 Pattern javadocsを参照し、関連する Unicode 標準を参照してください。

于 2013-01-31T23:00:46.617 に答える