Java Unicode正则表达式无法匹配德语字符

3
这个问题是基于这个问题的。
为了匹配德语和法语中的所有字母,我使用\P{M}\p{M}*
我选择了这个正则表达式来避免定义每一个unicode字符,例如: ^[a-zA-Z[\\u00c0-\\u01ff]]+[\\']?(([-]?[a-zA-Z[\\u00c0-\\u01ff]]*[\\s]?)|([\\s]?[a-zA-Z[\\u00c0-\\u01ff]]*[-]?)){1,2}[a-zA-Z[\\u00c0-\\u01ff]]+$ 但是,尽管使用前面问题中定义的unicode格式,像ßè这样的字符并没有被正则表达式匹配到。
我正在使用JDK 6。
我缺少什么?谢谢!

2
你能贴一些代码片段或失败的测试吗? - Antoine Wils
2个回答

3

使用 posix 字符类 \p{L} 表示 "任何字母":

System.out.println("abcßè".matches("\\p{L}+")); // true

我收到了这个异常: java.util.regex.PatternSyntaxException: Unknown character property name {Latin} near index 10 \p{IsLatin}+。我猜测格式有问题,但我不知道出了什么问题。 - Ionut
你可能编写了 "\\p{Latin}" 而不是 "\\p{IsLatin}" 吗?无论如何,我刚刚意识到你可以直接使用 "\\p{L}" 表示“任何字母” - 请参见更新的答案。 - Bohemian
它是IsLatin。例如,您可以在此处测试它:http://java-regex-tester.appspot.com/,您将收到相同的错误。 - Ionut
那个网站不理解\p{IsLatin},但是可以理解\p{L}(可能是JDK版本的问题)。你尝试过像我更新的答案中的"\\p{L}"吗? - Bohemian

0
使用Java 6,这段代码为:
 public static void main(String[] args) {
       String str = "hello ß you";
       Pattern p = Pattern.compile("(:?\\P{M}\\p{M}*)+");
       Matcher matcher = p.matcher(str);
       System.out.println("replaced: '" + matcher.replaceAll("") + "'");
}

返回:替换为:''

匹配到了 'ß'


嗨!谢谢,但似乎这个模式也匹配数字和其他特殊字符,如“_”或空格。 - Ionut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接