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

Case insensitive regex matching both à and À

我遇到了像 /(?i)À/ 这样与大小写无关的正则表达式与像 à 这样的小写行不匹配的问题。

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

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

这是应该 return 正确但 return 错误的代码示例 Pattern.compile("À", Pattern.CASE_INSENSITIVE).matcher("à").matches()

中,您可以指定标志Pattern.CASE_INSENSITIVEPattern.UNICODE_CASE,即:

final Pattern pattern = Pattern.compile("À", Pattern.CASE_INSENSITIVE | 
                                             Pattern.UNICODE_CASE);

Pattern.CASE_INSENSITIVE:

When this flag is specified then case-insensitive matching, when enabled by the CASE_INSENSITIVE flag, is done in a manner consistent with the Unicode Standard. By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched.

换一种方式,您可以使用嵌入的标志表达式。即:

final Pattern pattern = Pattern.compile("(?iu)À");

嵌入标志表达式可以包括CASE_INSENSITIVE, MULTILINE, DOTALL, UNICODE_CASE, CANON_EQ, UNIX_LINES, LITERAL, UNICODE_CHARACTER_CLASS and COMMENTS.

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

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