Java不区分大小写的正则表达式匹配不';t使用字母Ñ;

Java不区分大小写的正则表达式匹配不';t使用字母Ñ;,java,regex,Java,Regex,考虑一下这个计划: import java.util.regex.Pattern; public class xx { /* * Ñ * LATIN CAPITAL LETTER N WITH TILDE * Unicode: U+00D1, UTF-8: C3 91 */ public static final String BIG_N = "\u00d1"; /* * ñ * LATIN SMA

考虑一下这个计划:

import java.util.regex.Pattern;
public class xx {

    /*
     *  Ñ
     *  LATIN CAPITAL LETTER N WITH TILDE
     *  Unicode: U+00D1, UTF-8: C3 91
     */
    public static final String BIG_N = "\u00d1";

    /*
     *  ñ
     *  LATIN SMALL LETTER N WITH TILDE
     *  Unicode: U+00F1, UTF-8: C3 B1
     */
    public static final String LITTLE_N = "\u00f1";

    public static void main(String[] args) throws Exception {
        System.out.println(BIG_N.equalsIgnoreCase(LITTLE_N));
        System.out.println(Pattern.compile(BIG_N, Pattern.CASE_INSENSITIVE).matcher(LITTLE_N).matches());
    }
}
由于ñ是ñ的大写版本,因此您希望它打印:

true
true
但它实际打印的内容(java 1.7.0_17-b02)是:

为什么?

默认情况下,不区分大小写的匹配假定仅匹配US-ASCII字符集中的字符。可以通过将Unicode_case标志与此标志一起指定来启用支持Unicode的不区分大小写匹配

和完整性;您或(
|
)将标志放在一起

Pattern.compile(BIG_N, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)

哦!旧的美国ASCII再次抬起它丑陋的头。谢谢谢谢我想早点去,但太早了。然后是吃晚饭的时候了。塔可之夜。
Pattern.compile(BIG_N, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE)