Pattern.matches(“123 $ 45”,“123 $ 45”)返回false,我推测是因为特殊的$ char。
我怀疑逃避$会让它通过
e.g。 Pattern.matches( “123 \ $ 45”, “123 \ $ 45”)
但这也失败了。
确保它们匹配的正确方法是什么?
答案 0 :(得分:7)
这是“规范”正则表达式\$
,但这里是一个Java字符串。在Java字符串中,\
被写为"\\"
。因此:
"123\\$45"
关于目标字符串,只需要"123$45"
。
答案 1 :(得分:2)
如果您要查找的模式是固定模式,则手动转义'$'
字符,以使其不被视为正则表达式元字符;即
boolean itMatches = Pattern.matches("123\\$45", "123$45");
'$'
使用单个反斜杠在String对象的级别进行转义。但是,由于我们使用String literal 来表达它,并且反斜杠是字符串文字的转义字符,我们需要(字符串)转义(正则表达式)转义字符。因此,我们需要两个反斜杠......这里。
如果你没有逃避转义,Java编译器实际上说“我不认识”\ $“作为有效的字符串文字转义序列。错误!”。
另一方面,如果输入或生成模式,则可以使用Pattern.quote()
来引用它;即。
String literal = "123$45"; // ... or any literal string you want to match.
boolean itMatches = Pattern.matches(Pattern.quote(literal), "123$45");