我指的是此处列出的测试工具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',上面有一个戒指。
我没有正确理解用例吗?
答案 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