Java正则表达式:为什么数字[0-9],逗号等不是unicode?

Hua*_*hao -2 java regex unicode

class Test
{
    public static void main (String[] args)
    {
        String regex = "\\p{L}";
        System.out.println("0".matches(regex));
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码打印为false,但我期望是真的因为ASCII不是unicode的子集吗?"0"是ASCII的一部分,所以我认为它也应该属于unicode字母.

另外,逗号,句号等打印"false"为true,而"a"将打印为true.

anu*_*ava 5

这是因为\\p{L}匹配一个Unicode字母,你匹配一个数字.

您可以使用:

[\\p{L}\\p{Nd}.,]
Run Code Online (Sandbox Code Playgroud)

匹配Unicode数字或字母.

您还应该(?U)在正则表达式前面使用Unicode支持,如下所示:

String regex = "(?U)[\\p{L}\\p{Nd}.,]+";
Run Code Online (Sandbox Code Playgroud)