与转义字符模式匹配的正确方法

时间:2013-08-05 00:29:04

标签: java pattern-matching

Pattern.matches(“123 $ 45”,“123 $ 45”)返回false,我推测是因为特殊的$ char。

我怀疑逃避$会让它通过

e.g。 Pattern.matches( “123 \ $ 45”, “123 \ $ 45”)

但这也失败了。

确保它们匹配的正确方法是什么?

2 个答案:

答案 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");