Java 与不同语言不匹配的模式对象
当用户输入英语时,我有下面的reg表达式可以正常工作。 但当使用葡萄牙语字符时,它总是失败Java 与不同语言不匹配的模式对象,java,regex,Java,Regex,当用户输入英语时,我有下面的reg表达式可以正常工作。 但当使用葡萄牙语字符时,它总是失败 Pattern p = Pattern.compile("^[a-zA-Z]*$"); Matcher matcher = p.matcher(fieldName); if (!matcher.matches()) { .... } 是否有任何方法可以让pattern对象识别有效的葡萄牙语字符,如Á195ÀÊÍÓÕÚç 谢谢它应该与考虑Unicode字符的“^\p{IsAlphabetic}*$
Pattern p = Pattern.compile("^[a-zA-Z]*$");
Matcher matcher = p.matcher(fieldName);
if (!matcher.matches())
{
....
}
是否有任何方法可以让pattern对象识别有效的葡萄牙语字符,如Á195ÀÊÍÓÕÚç
谢谢它应该与考虑Unicode字符的“^\p{IsAlphabetic}*$”
一起使用。有关参考信息,请参见文档中的选项,尤其是Unicode部分:
Unicode块和类别是用\p和\p编写的
与Perl中相同的构造\如果输入具有属性,则p{prop}匹配
prop,而如果输入具有该属性,\P{prop}则不匹配。
块以中的前缀指定,如在蒙古语中。类别
可以使用可选前缀指定为\p{L}和\p{IsL}
表示Unicode字母的类别。可以创建块和类别
在字符类的内部和外部使用
(对于Java1.4.x)。我怀疑您对识别Unicode字母感兴趣,而不是特别是葡萄牙语字母?您需要一个与所有字母类匹配的正则表达式。在世界上所有的脚本中,都有很多这样的脚本,但幸运的是,我们可以告诉Java6的RE引擎我们在寻找一个字母,它将使用Unicode类的魔力来完成其余的任务。特别是,
L
类匹配所有类型的字母,包括大写字母、小写字母和“哦,这个概念在我的语言中不适用”:
Pattern p = Pattern.compile("^\\p{L}*$");
// the rest is identical, so won't repeat it...
在阅读时,请记住,如果反斜杠放在Java文本中,则需要将其加倍,以防止Java编译器将其解释为其他内容。(还要注意,RE不适用于验证人名之类的事情,这是一个完全不同且困难得多的问题。)我们是否也可以假设支持俄语、阿拉伯语和汉语名称?@MatthewFarwell true,遗憾的是,在使用Unicode时,7之前版本的Java模式匹配严重不足。感谢Viruzzo,不幸的是,我们的生产服务器都使用Java 6,我不确定它们何时会升级到Java 7:(@Thomas:Try
\p{L}
,列在中。@Donal你是我的英雄:)非常好用……谢谢你们,并为其他人的反馈干杯。@DonalFellows将其作为答案发布,这样他就可以奖励你们,这是正确的Brian。我已经阅读了该文档,但不确定如何将其应用于正则表达式,Java 6是否容易实现?如果是的话,你能提供一个简单的例子吗?谢谢-文档中缺少此链接,我将在此搜索示例和信息。