带有国际字母的Java正则表达式

dis*_*ver 5 java regex internationalization

这是我目前的代码:

return str.matches("^[A-Za-z\\-'. ]+");
Run Code Online (Sandbox Code Playgroud)

我希望它包括国际信件.我如何用Java做到这一点?

谢谢.

Paw*_*yda 12

您似乎想要匹配所有字母字符.通常情况下,您可以使用Posix \p{Alpha}表达式,通过您想要允许的标点符号进行扩展.正如Java正则表达式文档所述,它仅与ASCII匹配.

但是,什么文档没有说清楚,你可以使这个类使用Unicode字符.要做到这一点,你需要打开Unicode字符类匹配.
您可以通过以下两种方式之一完成此操作:

  1. 通过创建Pattern传递UNICODE_CHARACTER_CLASS常量的对象:
    Pattern p = Pattern.compile("^[p{Alpha}\\-'. ]+", UNICODE_CHARACTER_CLASS);
  2. 通过使用(?U)嵌入式模式标志:
    str.matches("^(?U)[\\p{Alpha}\\-'. ]+");

概念证明:

String[] test = {"Jean-Marie Le'Blanc", "?ó??", "????????", "????"};
for (String str : test) {
    System.out.print(str.matches("^(?U)[\\p{Alpha}\\-'. ]+") + " ");
}
Run Code Online (Sandbox Code Playgroud)

显而易见的结果是:

真的是真的

如果你认为一切都是正确的,我还有两点要做: