4

PatternすべてのUnicode数字と英字に一致するを作成する必要があります。これまでのところ私は持ってい"\\p{IsAlphabetic}|[0-9]"ます。

最初の部分は私にとってうまく機能しており、非ラテン文字をアルファベット文字として識別するのに適しています。問題は後半です。明らかに、それはアラビア数字に対してのみ機能します。キャラクタークラス\\dとも\p{Digit}ただ[0-9]です。のjavadocはPattern、Unicode数字の文字クラスについて言及していないようです。誰かがこの問題の良い解決策を持っていますか?

私の目的では、をCharacter.isDigit返すすべての文字のセットを一致させる方法を受け入れますtrue

4

2 に答える 2

6

についてのJavaドキュメントの引用isDigit

getType(codePoint)によって提供される一般的なカテゴリタイプがDECIMAL_DIGIT_NUMBERの場合、文字は数字です。

したがって、数字と一致するパターンはである必要があると思います\p{Nd}

これがideoneでの実例です。ご覧のとおり、結果はとの間Pattern.matchesで一貫していCharacter.isDigitます。

于 2013-02-18T22:12:15.143 に答える
4

を使用\dしますが、(?U)フラグを指定して、事前定義された文字クラスとPOSIX文字クラスのUnicodeバージョンを有効にします。

(?U)\d+

またはコードで:

System.out.println("3๓३".matches("(?U)\\d+")); // true

を使用することは、フラグを指定し(?U)て呼び出すことによって正規表現をコンパイルすることと同じです。Pattern.compile()UNICODE_CHARACTER_CLASS

Pattern pattern = Pattern.compile("\\d", Pattern.UNICODE_CHARACTER_CLASS);
于 2016-04-25T18:23:21.183 に答える