我遇到了与大小写无关的正则表达式 like/(?i)À/
与小写中的行不匹配的问题 like à
。
我在代码中检查了这个并确保"À".toLowerCase() == "à"
不区分大小写的正则表达式是否仅适用于英文(或拉丁文)字符?
这是应该返回true但返回false的代码示例
Pattern.compile("À", Pattern.CASE_INSENSITIVE).matcher("à").matches()
在java中,您可以指定标志Pattern.CASE_INSENSITIVE
和Pattern.UNICODE_CASE
,即:
final Pattern pattern = Pattern.compile("À", Pattern.CASE_INSENSITIVE |
Pattern.UNICODE_CASE);
与Pattern.CASE_INSENSITIVE
:
如果指定了这个标志,那么当标志启用时,不区分大小写的匹配
CASE_INSENSITIVE
以符合 Unicode 标准的方式进行。默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。
以另一种方式,您可以使用嵌入的标志表达式。IE:
final Pattern pattern = Pattern.compile("(?iu)À");
嵌入标志表达式可以包括CASE_INSENSITIVE
, MULTILINE
, DOTALL
, UNICODE_CASE
, CANON_EQ
, UNIX_LINES
, LITERAL
,UNICODE_CHARACTER_CLASS
和COMMENTS
.
接下来,您可以使用相应的嵌入标志(如果存在)的标志列表:
+--------------+------+ | UNIX_LINES | (?d) | | CASE_INSENSITIVE | (?i) | | 评论 | (?x) | | 多行 | (?m) | | 字面| | | 圆点 | (?s) | | UNICODE_CASE | (?u) | | CANON_EQ | | | UNICODE_CHARACTER_CLASS | (?U) | +--------------+------+