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

Мар*_*нко 5 java regex

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

Wik*_*żew 6

实际上,\\p{Alpha}它是一个 POSIX 字符类实现,仅在与UNICODE_CHARACTER_CLASS(或(?U)标志)结合使用时才匹配扩展字符,同时\\p{L}始终匹配 BMP 平面中的所有 Unicode 字母。请注意,您可以写\\p{L}\\pL\\p{IsL}

\n\n

查看更多参考详情

\n\n
\n

\\p{L}\\p{IsL}表示Unicode 字母的类别
\n
\n POSIX 字符类(仅限 US-ASCII)
\n \\p{Lower}小写字母字符:[a-z]
\n \\p{Upper}大写字母字符:[A-Z]
\n \\p{Alpha}字母字符:[\\p{Lower}\\p{Upper}]

\n
\n\n

看看下面的演示

\n\n
String l = "Abc";\nString c = "\xd0\x90\xd0\xb1\xd0\xb2";\nSystem.out.println(l.matches("\\\\p{Alpha}+"));     // => true\nSystem.out.println(c.matches("\\\\p{Alpha}+"));     // => false\nSystem.out.println(c.matches("(?U)\\\\p{Alpha}+")); // => true\nSystem.out.println(l.matches("\\\\p{L}+"));         // => true\nSystem.out.println(c.matches("\\\\p{L}+"));         // => true\n
Run Code Online (Sandbox Code Playgroud)\n