将 Unicode 字母与 Java 正则表达式匹配(例如)

StackOverflow上有很多问题和答案,假设一个“字母”可以在正则表达式中由 匹配。然而,对于Unicode,还有更多的字符,大多数人会认为是一个字母(所有希腊字母,Cyrllic......等等)。Unicode 定义了许多块,每个块可能都有“字母”。[a-zA-Z]

Java 定义为字母字符等内容定义了 Posix 类,但指定它仅适用于 US-ASCII。预定义的字符类定义由 组成的单词,这也排除了许多字母。[a-zA-Z_0-9]

那么,如何正确匹配 Unicode 字符串呢?还有其他一些库可以做到这一点吗?


答案 1

在这里,你有一个非常好的解释:

http://www.regular-expressions.info/unicode.html

一些提示:

“不幸的是,Java和.NET还不支持。用作替代品。要匹配任意数量的字形,请使用 代替 。”\X\P{M}\p{M}*(?:\P{M}\p{M}*)+\X+

“在Java中,正则表达式令牌仅与指定的代码点匹配,即使您打开了规范等效性也是如此。但是,在 Java 源代码中,也使用相同的语法将 Unicode 字符插入到文本字符串中。 将匹配 的单码点和双码点编码,而仅匹配单码点版本。请记住,将正则表达式编写为 Java 字符串文本时,必须对反斜杠进行转义。前者Java代码编译正则表达式,而后者编译。根据你正在做的事情,差异可能很大。\uFFFF\uFFFFPattern.compile("\u00E0")àPattern.compile("\\u00E0")à\u00E0


答案 2

你说的是Unicode类别,比如字母吗?这些由形式的正则表达式匹配,其中“CAT”是类别代码,如任何字母,或子类别,如大写或标题大小写。\p{CAT}LLuLt