我无法让带有前导/尾随 $ 的正则表达式在 Java (1.6.20) 中匹配。
从这段代码:
System.out.println( "$40".matches("\\b\\Q$40\\E\\b") );
System.out.println( "$40".matches(".*\\Q$40\\E.*") );
System.out.println( "$40".matches("\\Q$40\\E") );
System.out.println( " ------ " );
System.out.println( "40$".matches("\\b\\Q40$\\E\\b") );
System.out.println( "40$".matches(".*\\Q40$\\E.*") );
System.out.println( "40$".matches("\\Q40$\\E") );
System.out.println( " ------ " );
System.out.println( "4$0".matches("\\b\\Q4$0\\E\\b") );
System.out.println( "40".matches("\\b\\Q40\\E\\b") );
我得到这些结果:
false
true
true
------
false
true
true
------
true
true
前两个区块中的主要错误似乎是问题所在。也就是说,前导/尾随 $(美元符号)在 \b(单词边界)标记的上下文中没有被正确拾取。
块中的真实结果表明它不是引用的美元符号本身,因为将 \b 替换为 .* 或一起删除可以获得所需的结果。
最后两个“真”结果表明,问题既不在于内部引用的 $,也不在于带引号的表达式“\Q ... \E”内的单词边界 (\b) 匹配。
这是一个Java错误还是我错过了什么?