2017-01-25 5 views
-2
class Test 
{ 
    public static void main (String[] args) 
    { 
     String regex = "\\p{L}"; 
     System.out.println("0".matches(regex)); 
    } 
} 

上記のコードはfalseを出力しますが、はユニコードのサブセットのサブセットではないため、私は本当のことを期待していましたか? "0"はASCIIの一部なので、Unicode文字にも属しているはずです。Java正規表現:数字[0-9]、カンマなどがユニコードでないのはなぜですか?

また、カンマ、ピリオドなどは "false"を出力しますが、 "a"はtrueを出力します。

+3

「L」は「文字」の略かしら...あなたはどう思いますか?それは手紙を受け入れるので、数字はないので...そしてもう一度、研究はupvoteを得る... lovely。 – Tom

+0

Unicode文字とすべてのASCIIシンボルをマッチさせる場合は、["\\ p {L} \\ p {ASCII}]" ' –

答えて

5

\\p{L}がUnicode文字と一致し、数字が一致しているためです。

あなたは使用することができます。

[\\p{L}\\p{Nd}.,] 

をUnicodeの数字や文字を一致させます。

また、このようなUnicodeサポートのためにあなたの正規表現の前で(?U)を使用する必要があります。

String regex = "(?U)[\\p{L}\\p{Nd}.,]+"; 
+0

を使用してください! \\ p {N}は数字のために働きます。しかし、カンマ(「、」)の場合は、どのように使用しますか? –

+1

なぜ((?U) '([UNICODE_CHARACTER_CLASS](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#UNICODE_CHARACTER_CLASS))を追加しますか? '\ p {L}'と '\ p {Nd}'はすでに完全なUnicodeで、 '(?U)'の影響を受けません。 javadocは次のように述べています。* "Unicodeバージョンの事前定義された文字クラスとPOSIX文字クラス" *を有効にします。 '\ w'(あらかじめ定義されている)と' \ p {Alpha} '(POSIX)です。 – Andreas

+0

はい、あなたは正しいです@アンドレアス。 '\ p {L}'と '\ p {Nd}'に '(?U)'を使う必要はありません。しかし、私はそれを使用するように提案された 'ドット'とカンマのユニコード変種についてはあまりよく分かりませんでした。 – anubhava

関連する問題