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

在StackOverflow上有很多问题和答案,假设可以在regexp中使用来匹配“字母”

[a-zA-Z]。但是,使用Unicode时,会有更多的字符被大多数人视为字母(所有希腊字母,Cyrllic

..等等)。Unicode定义了许多块,每个块可能都有“字母”。

Java定义

为诸如字母字符之类的东西定义了Posix类,但是被指定为仅与US-

ASCII一起使用。预定义的字符类将单词定义为[a-zA-Z_0-9],其中还包括许多字母。

那么,如何正确匹配Unicode字符串呢?还有其他一些库可以解决这个问题吗?

回答:

在这里,您有一个很好的解释:

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

一些提示:

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

“在Java中,\uFFFF即使打开了规范等效功能,正则表达式令牌也仅与指定的代码点匹配。但是,相同的语法\uFFFF也用于将Unicode字符插入Java源代码的文字字符串中。Pattern.compile("\u00E0")这两个代码都将匹配的-

点和双代码点编码à,而Pattern.compile("\\u00E0")仅匹配单代码点版本。请记住,将正则表达式编写为Java字符串文字时,必须转义反斜杠。前者Java代码编译regex

à,后者编译\u00E0。根据您所执行的操作,差异可能会很大。”

以上是 将Unicode字母与Java正则表达式匹配(例如) 的全部内容, 来源链接: utcz.com/qa/417421.html

回到顶部