Unicode数字的字符类

时间:2013-02-18 22:06:44

标签: java regex

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

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

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

2 个答案:

答案 0 :(得分:4)

引用关于isDigit的{​​{3}}:

  

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

所以,我认为匹配数字的模式应该是Java docs

这是一个\p{Nd}。如您所见,结果在Pattern.matchesCharacter.isDigit之间保持一致。

答案 1 :(得分:4)

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

(?U)\d+

或代码:

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

使用(?U)相当于通过使用Pattern.compile()标记调用UNICODE_CHARACTER_CLASS来编译正则结构:

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