这是我目前的代码:
return str.matches("^[A-Za-z\\-'. ]+");
我希望它包含国际信件。我如何用Java做到这一点?
感谢。
答案 0 :(得分:11)
似乎您想要匹配所有字母字符。通常情况下,您可以使用Posix \p{Alpha}
表达式,通过您想要允许的标点符号进行扩展。正如Java Regular Expressions documentation所述,它仅与ASCII匹配。
但是,什么文档没有说清楚,你可以使这个类使用Unicode字符。要做到这一点,你需要打开 Unicode字符类匹配 您可以通过以下两种方式之一完成此操作:
Pattern
对象传递UNICODE_CHARACTER_CLASS
常量:Pattern p = Pattern.compile("^[p{Alpha}\\-'. ]+", UNICODE_CHARACTER_CLASS);
(?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
如果您认为一切正确,我还有两点要做:
答案 1 :(得分:3)
我假设您要匹配ASCII字母A-Z以外的字母数字字符。您可以使用\p{IsAlphabetic}
Unicode字符类执行此操作:
return str.matches("^[\\p{IsAlphabetic}\\-'. ]+");
你会发现更多的Unicode字符类full documentation。
答案 2 :(得分:1)
将图案替换为:
"^[\\p{L}\\-'. ]+"
\p{L}
包含所有unicode字母。
答案 3 :(得分:1)
使用正则表达式\P{L}
匹配任何字母(国内或国际)
通过添加[\p{L}&&[^\p{IsLatin}]]
,您可以匹配所有非拉丁字母。
特别是对于希腊语,正则表达式\p{InGreek}
匹配希腊字母和\P{InGreek}
(差异为大写字母P)以匹配非希腊字母。
答案 4 :(得分:0)
除非你用“国际字母”说出你的意思,否则这个问题无法完全回答,但一般的解决办法是通过\p{name}
语法使用命名的字符类。有许多命名的字符类。一些是由正则表达式语言定义的,另一些是由Unicode标准定义的。有关部分列表和相关的Unicode标准,请参阅Pattern javadocs。