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.matches
和Character.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);