我有一个Java正则表达式模式和一个我想完全匹配的句子,但是对于一些句子它错误地失败了。为什么是这样? (为简单起见,我不会用我的正则表达式复杂,但只是 “*”)Java正则表达式总是失败
System.out.println(Pattern.matches(".*", "asdf"));
System.out.println(Pattern.matches(".*", "[11:04:34] <@Aimbotter> 1 more thing"));
System.out.println(Pattern.matches(".*", "[11:04:35] <@Aimbotter> Dialogue: 0,0:00:00.00,0:00:00.00,Default,{Orginal LV,0000,0000,0000,,[???]??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????} "));
System.out.println(Pattern.matches(".*", "[11:04:35] <@Aimbotter> Dialogue: 0,0:00:00.00,0:00:00.00,Default,{Orginal LV,0000,0000,0000,,[???]????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????} "));
输出:
true
true
true
false
注意的是,第四句包含10个的Unicode控制字符\ u0085之间问号,通常字体不显示。第三个和第四个句子实际上包含相同数量的字符!
这是特别奇怪,因为Java是一个Unicode正则表达式引擎... – 2011-05-12 12:52:10
这将是糟糕的,如果Java的不知道Unicode行终止(http://www.fileformat.info/info/unicode/char /85/index.htm) – rurouni 2011-05-12 13:03:18
... @ tchrist不久将告诉我们关于java正则表达式引擎是如何破坏的。 – aioobe 2011-05-12 13:05:17