将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