模式中的典范等价

时间:2012-04-22 05:01:47

标签: java pattern-matching

我指的是此处列出的测试工具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上的教程所示,我将模式或正则表达式设置为a\u030A,字符串匹配为\u00E5,但它结束于找不到匹配项。我看到两根琴弦都是一个小盒子'a',上面有一个戒指。

我没有正确理解用例吗?

1 个答案:

答案 0 :(得分: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