我需要创建一个匹配所有Unicode数字和字母字符的Pattern
。到目前为止,我有"\\p{IsAlphabetic}|[0-9]"
。
第一部分对我来说效果很好,它在将非拉丁字符识别为字母字符方面做得很好。问题是下半场。显然它只适用于阿拉伯数字。字符类\\d
和\p{Digit}
也只是[0-9]
。 Pattern
的javadoc似乎没有提到Unicode数字的字符类。有没有人有这个问题的好解决方案?
出于我的目的,我会接受一种方法来匹配Character.isDigit
返回true
的所有字符集。
答案 0 :(得分:4)
引用关于isDigit
的{{3}}:
如果由getType(codePoint)提供的常规类别类型为DECIMAL_DIGIT_NUMBER,则字符为数字。
所以,我认为匹配数字的模式应该是Java docs。
这是一个\p{Nd}
。如您所见,结果在Pattern.matches
和Character.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);