我得到它\p{L}
包括来自Unicode符号的所有字母,\p{Alpha}
略有相同但仅适用于拉丁字母(ASCII)。在我的工作中,我有'A'拉丁语和'A'西里尔语,而旧的Java代码中的\p{Alpha}
与西里尔符号不匹配。在我测试时,\p{L}
对我来说是解决方案。你能不能给我一些关于这种情况的建议以及我在java代码中使用的内容?在此页面上http://www.regular-expressions.info/posixbrackets.html使用\p{Alpha}
获取java代码。
答案 0 :(得分:4)
实际上,\p{Alpha}
是一个POSIX字符类实现,只有在与UNICODE_CHARACTER_CLASS(或(?U)
标志)结合使用时才会匹配扩展字符,而\p{L}
将永远匹配BMP平面中的所有Unicode字母。请注意,您可以将\p{L}
写为\pL
或\p{IsL}
。
查看更多reference details:
\p{L}
和\p{IsL}
都表示 类别的Unicode字母 。
POSIX字符类(仅限US-ASCII)
\p{Lower}
小写字母字符:[a-z]
\p{Upper}
大写字母字符:[A-Z]
\p{Alpha}
字母字符:[\p{Lower}\p{Upper}]
String l = "Abc";
String c = "Абв";
System.out.println(l.matches("\\p{Alpha}+")); // => true
System.out.println(c.matches("\\p{Alpha}+")); // => false
System.out.println(c.matches("(?U)\\p{Alpha}+")); // => true
System.out.println(l.matches("\\p{L}+")); // => true
System.out.println(c.matches("\\p{L}+")); // => true