据我所知,\p{L}
包括来自 Unicode 符号的所有字母,\p{Alpha}
略有相同,但仅适用于拉丁字母 (ASCII) .在我的工作中,我有 'A' latin 和 'A' cyrillic,并且旧 java 代码中的 \p{Alpha}
不匹配西里尔符号作为字母。当我测试它时,\p{L}
是我的解决方案。你们能给我一些关于这种情况的建议以及我应该在 Java 代码中使用什么吗?本页http://www.regular-expressions.info/posixbrackets.html使用 \p{Alpha}
作为 java 代码。
最佳答案
实际上,\p{Alpha}
是一个 POSIX 字符类实现,只有在与 UNICODE_CHARACTER_CLASS 结合使用时才会匹配扩展字符。 (或 (?U)
标志),而 \p{L}
将始终匹配 BMP 平面中的所有 Unicode 字母。请注意,您可以将 \p{L}
写为 \pL
或 \p{IsL}
。
查看更多reference details :
Both
\p{L}
and\p{IsL}
denote the category of Unicode letters.
POSIX character classes (US-ASCII only)
\p{Lower}
A lower-case alphabetic character:[a-z]
\p{Upper}
An upper-case alphabetic character:[A-Z]
\p{Alpha}
An alphabetic character:[\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
关于java - Java中\p{Alpha}和\p{L}的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480452/