我遇到过像/(?i)À/
这样的独立正则表达式与à
这样的小写行不匹配。
我在代码中检查了这一点并确保"À".toLowerCase() == "à"
不区分大小写的正则表达式是否仅适用于英语(或拉丁语)字符?
以下是应该返回true的代码示例,但返回false
Pattern.compile("À", Pattern.CASE_INSENSITIVE).matcher("à").matches()
答案 0 :(得分:2)
在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字符集中的字符。
另一方面,您可以使用嵌入的标志表达式。即:
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) | | COMMENTS | (?x) | | MULTILINE | (?m) | | LITERAL | | | DOTALL | (?s) | | UNICODE_CASE | (?u) | | CANON_EQ | | | UNICODE_CHARACTER_CLASS | (?U) | +-------------------------+------+