Unicode数字的字符类

我需要创建一个匹配所有Unicode数字和字母字符的模式。 到目前为止,我有"\\p{IsAlphabetic}|[0-9]"

第一部分对我来说效果很好,它在将非拉丁字符识别为字母字符方面做得很好。 问题是下半场。 显然它只适用于阿拉伯数字。 字符类\\d\p{Digit}也只是[0-9]Pattern的javadoc似乎没有提到Unicode数字的字符类。 有没有人有这个问题的好解决方案?

出于我的目的,我会接受一种匹配Character.isDigit返回true的所有字符集的方法。

引用有关isDigit的Java文档 :

如果由getType(codePoint)提供的常规类别类型为DECIMAL_DIGIT_NUMBER,则字符为数字。

所以,我认为匹配数字的模式应该是\p{Nd}

这是ideone的一个工作示例 。 如您所见, Pattern.matchesCharacter.isDigit之间的结果是一致的。

使用\d ,但使用(?U)标志启用Unicode版本的预定义字符类和POSIX字符类:

 (?U)\d+ 

或在代码中:

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

使用(?U)等效于通过使用UNICODE_CHARACTER_CLASS标志调用Pattern.compile()来编译正则表达式:

 Pattern pattern = Pattern.compile("\\d", Pattern.UNICODE_CHARACTER_CLASS);