6

ここにリストされているテストハーネスを参照していますhttp://docs.oracle.com/javase/tutorial/essential/regex/test_harness.html

クラスに加えた唯一の変更は、パターンが次のように作成されることです。

Pattern pattern = 
        Pattern.compile(console.readLine("%nEnter your regex(Pattern.CANON_EQ set): "),Pattern.CANON_EQ);

http://docs.oracle.com/javase/tutorial/essential/regex/pattern.htmlのチュートリアルが示唆しているように、パターンまたは正規表現asa\u030Aと文字列を入力して一致さ\u00E5せますが、一致が見つかりませんで終了します。両方の弦が小さなケース「a」で、上部にリングが付いているのを見ました。

ユースケースを正しく理解していませんか?

4

1 に答える 1

7

あなたが見ている振る舞いはPattern.CANON_EQ旗とは何の関係もありません。

コンソールから読み取られる入力は、Java文字列リテラルと同じではありません。ユーザー(おそらくあなた、このフラグをテストしている)\u00E5がコンソールに入力すると、によって読み取られる結果の文字列は、「å」ではなく、console.readLineと同等になります。"\\u00E5"自分の目で確かめてください:http://ideone.com/lF7D1

についてPattern.CANON_EQは、説明どおりに動作します。

Pattern withCE = Pattern.compile("^a\u030A$",Pattern.CANON_EQ);
Pattern withoutCE = Pattern.compile("^a\u030A$");
String input = "\u00E5";

System.out.println("Matches with canon eq: "
    + withCE.matcher(input).matches()); // true
System.out.println("Matches without canon eq: "
    + withoutCE.matcher(input).matches()); // false

http://ideone.com/nEV1V

于 2012-04-22T05:22:14.237 に答える