java - Java中\p{Alpha}和\p{L}的区别

标签 java regex

据我所知,\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/

相关文章:

java - JTextPane 和正则表达式的问题

javascript - 使用 angularjs 和 ngPattern 验证 UTF-8 名称

java - 正则表达式不选择第一次出现的文本

java - 如何在不使用 web.xml 的情况下将 JavaEE 7/JPA 2.1 动态 Web 应用程序部署到 IBM Liberty Profile

regex - AS3 正则表达式 不包括?

c# - 没有单个字母定界符的 RegEx 匹配

c# - 使用 Java 解密由 .NET 的 RijndaelManaged 加密的字节

java - 将一个正整数分解为至少两个正整数之和并返回最大乘积

java - 如何在 Java 中计算瓷砖地板需要多少 block 瓷砖

JavaScript 正则表达式删除特定的连续重复字符