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

标签 java regex internationalization

这是我当前的代码:

return str.matches("^[A-Za-z\\-'. ]+");

我希望它包括国际信件。我如何在 Java 中做到这一点?

谢谢。

最佳答案

看来您想要的是匹配所有字母 字符。通常情况下,您可以使用 Posix \p{Alpha} 表达式来做到这一点,并使用您也希望允许的标点符号进行扩展。作为Java Regular Expressions documentation说,它只匹配 ASCII。

但是,文档没有说清楚的是,你可以让这个类使用 Unicode 字符。为此,您需要打开 Unicode 字符类 匹配。
您可以通过以下两种方式之一执行此操作:

  1. 通过传递 UNICODE_CHARACTER_CLASS 常量创建 Pattern 对象:
    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}\\-'. ]+") + " ");
}

显而易见的结果是:

true true true true

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

关于带有国际字母的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14636540/

相关文章:

mysql - Unicode CSV 文件中未显示孟加拉语文本

javascript - 更改 React-native 中的设备区域设置

java - 使用Jsoup解析dl标签

java - Set 的奇怪 JSON 映射问题 - 缺少元素

java - Maven 3.5.0 抛出 ArrayIndexOutOfBoundsException,但使用 Maven 3.3.9 构建

java - 如何在 Maven Web 项目中捆绑/打包最新版本的自定义库而不更新 pom.xml?

c++ - 正则表达式 - 匹配后面没有特定模式的字符

ruby - 正则表达式匹配不包括第一个字符的字符串

c++ - 与boost正则表达式库的递归匹配

javascript - 我的 Javascript 代码中的多语言支持