不区分大小写的正则表达式匹配à和À

时间:2017-05-24 17:11:13

标签: java regex french

我遇到过像/(?i)À/这样的独立正则表达式与à这样的小写行不匹配。

我在代码中检查了这一点并确保"À".toLowerCase() == "à"

不区分大小写的正则表达式是否仅适用于英语(或拉丁语)字符?

以下是应该返回true的代码示例,但返回false Pattern.compile("À", Pattern.CASE_INSENSITIVE).matcher("à").matches()

1 个答案:

答案 0 :(得分:2)

中,您可以指定标记Pattern.CASE_INSENSITIVEPattern.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_INSENSITIVEMULTILINEDOTALLUNICODE_CASECANON_EQUNIX_LINESLITERALUNICODE_CHARACTER_CLASSCOMMENTS

接下来,您可以使用其对应的嵌入标志(如果存在)::

的标志列表
+-------------------------+------+
| UNIX_LINES              | (?d) |
| CASE_INSENSITIVE        | (?i) |
| COMMENTS                | (?x) |
| MULTILINE               | (?m) |
| LITERAL                 |      |
| DOTALL                  | (?s) |
| UNICODE_CASE            | (?u) |
| CANON_EQ                |      |
| UNICODE_CHARACTER_CLASS | (?U) |
+-------------------------+------+