Java正则表达式:为什么数字[0-9],逗号等不是unicode?
上面的代码打印为false,但我希望为true,因为ASCII不是unicode的子集吗?“0”是ASCII的一部分,所以我认为它也应该属于unicode字母Java正则表达式:为什么数字[0-9],逗号等不是unicode?,java,regex,unicode,Java,Regex,Unicode,上面的代码打印为false,但我希望为true,因为ASCII不是unicode的子集吗?“0”是ASCII的一部分,所以我认为它也应该属于unicode字母 此外,逗号、句点等将打印“false”true,而“a”将打印true。这是因为\\p{L}匹配一个Unicode字母,而您正在匹配一个数字 您可以使用: class Test { public static void main (String[] args) { String regex = "\\p{L
此外,逗号、句点等将打印“false”true,而“a”将打印true。这是因为
\\p{L}
匹配一个Unicode字母,而您正在匹配一个数字
您可以使用:
class Test
{
public static void main (String[] args)
{
String regex = "\\p{L}";
System.out.println("0".matches(regex));
}
}
匹配Unicode数字或字母
您还应该在正则表达式前面使用(?U)
,以获得Unicode支持,如下所示:
[\\p{L}\\p{Nd}.,]
我想知道“L”是否代表“字母”。。。你怎么认为?因为它接受字母,但不接受数字。。。再说一次,没有任何研究能赢得更高的投票权。。。可爱。如果您计划匹配Unicode字母和所有ASCII符号,请使用
“[\\p{L}\\p{ASCII}]”
谢谢\\p{N}适用于数字。但是对于逗号(即“,”),我应该使用什么?为什么要添加(?U)
()<代码>\p{L}和\p{Nd}
已经是完整的unicode,并且不受(?U)
的影响。正如javadoc所说:“启用Unicode版本的预定义字符类和POSIX字符类”,例如\w
(预定义)和\p{Alpha}
(POSIX)。是的,您是对的@Andreas。无需对\p{L}
和\p{Nd}
使用(?U)
。但我不太确定点和逗号的unicode变体,所以建议使用它。
String regex = "(?U)[\\p{L}\\p{Nd}.,]+";