在正则表达式中使用Unicode类别名称时出现PatternSyntaxException

时间:2012-12-06 22:35:57

标签: java android regex unicode uppercase

我正在尝试检测字符串是否包含Android应用中的所有大写字符。 [A-Z]作为字符类是不够的,因为字母可以用变音符号等来装饰。我想使用\p{IsLu}+作为模式,但它不断给我一个PatternSyntaxError

但是API reference会公布这些Unicode类别名称。我的模拟器运行的API级别是11。

如果我在正则表达式测试器上尝试我的正则表达式模式,例如在regexplanet,它运作正常。

这是logcat输出:

  

12-06 22:08:07.854:E / AndroidRuntime(737):致命异常:主要
      12-06 22:08:07.854:E / AndroidRuntime(737):java.util.regex.PatternSyntaxException:U_ILLEGAL_ARGUMENT_ERROR
      12-06 22:08:07.854:E / AndroidRuntime(737):\ p {isLu} +
      12-06 22:08:07.854:E / AndroidRuntime(737):at java.util.regex.Pattern.compileImpl(Native Method)

1 个答案:

答案 0 :(得分:6)

在您的实际代码中,您似乎已经编写了isLu而不是IsLu。但是,Is无论如何都只是一个别名。通常的Unicode属性只是\p{Lu}