4

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

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

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

4

2 回答 2

6

引用Java文档isDigit

如果 getType(codePoint) 提供的一般类别类型为 DECIMAL_DIGIT_NUMBER,则该字符是数字。

所以,我相信匹配数字的模式应该是\p{Nd}.

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

于 2013-02-18T22:12:15.143 回答
4

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

(?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);
于 2016-04-25T18:23:21.183 回答