分音記号に一致させたい名前の正規表現があります。これは、test.java:191 で始まる私のコードのログ スニペットです。
Util.Log("text = " + text);
Util.Log("regex = " + regex);
Util.Log("regexorig = " + regexorig);
Util.Log("Matches static: " + Pattern.matches(text, regex));
Pattern p1 = Pattern.compile(regex);
Util.Log("Matches p1: " + p1.matcher(text).matches());
Pattern p2 = Pattern.compile(regexorig, Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
Util.Log("Matches p2: " + p2.matcher(text).matches());
Util.Log("String matches: " + text.matches(regex));
入力「ü」を使用した場合の出力は次のとおりです。
LOG: (test.java:191):text = ü
LOG: (test.java:192):regex = (?iu)[A-Z][A-Z0-9 \-.',]*
LOG: (test.java:193):regexorig = [A-Z][A-Z0-9 \-.',]*
LOG: (test.java:194):Matches static: false
LOG: (test.java:196):Matches p1: false
LOG: (test.java:198):Matches p2: false
LOG: (test.java:199):String matches: false
分音符号を区別しない正規表現の一致が機能しないようです。これは Android のバグですか、それとも何か不足していますか? documentationによると、UNICODE_CASEはAndroidの大文字と小文字を区別しない文字列に対して常にオンになっているため、必要ないはずです(なぜそうなのかは本当にわかりませんが、それは別の議論の問題です)。