Java中\ p {Alpha}和\ p {L}之间的区别

时间:2015-12-27 12:37:50

标签: java regex

我得到它\p{L}包括来自Unicode符号的所有字母,\p{Alpha}略有相同但仅适用于拉丁字母(ASCII)。在我的工作中,我有'A'拉丁语和'A'西里尔语,而旧的Java代码中的\p{Alpha}与西里尔符号不匹配。在我测试时,\p{L}对我来说是解决方案。你能不能给我一些关于这种情况的建议以及我在java代码中使用的内容?在此页面上http://www.regular-expressions.info/posixbrackets.html使用\p{Alpha}获取java代码。

1 个答案:

答案 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}]

查看following demo

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