Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与不同语言不匹配的模式对象_Java_Regex - Fatal编程技术网

Java 与不同语言不匹配的模式对象

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}*$

当用户输入英语时,我有下面的reg表达式可以正常工作。 但当使用葡萄牙语字符时,它总是失败

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是否容易实现?如果是的话,你能提供一个简单的例子吗?谢谢-文档中缺少此链接,我将在此搜索示例和信息。