2

Pattern.matches("123$45","123$45") 返回 false,我推测是因为特殊的 $ 字符。

我的怀疑是逃避 $ 会让它通过

例如 Pattern.matches("123\$45","123\$45")

但这也失败了。

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

4

2 回答 2

7

这是“规范”正则表达式\$,但这里是 Java 字符串。在 Java 字符串中, a\被写入"\\". 所以:

"123\\$45"

至于你的目标字符串,它只需要是"123$45".

于 2013-08-05T00:30:37.247 回答
2

如果您要查找的模式是固定模式,则手动转义该'$'字符,使其不被视为正则表达式元字符;IE

 boolean itMatches = Pattern.matches("123\\$45", "123$45");

使用'$'单个反斜杠在 String 对象的级别进行转义。但是,由于我们使用字符串文字来表达这一点,并且反斜杠是字符串文字的转义字符,因此我们需要(字符串)转义(正则表达式)转义字符。因此,我们需要两个反斜杠......在这里。

如果您不转义转义,Java 编译器实际上会说“我不将“\$”识别为有效的字符串文字转义序列。错误!”。


另一方面,如果模式输入或生成,那么你可以用Pattern.quote()它来引用它;IE

 String literal = "123$45";  // ... or any literal string you want to match.

 boolean itMatches = Pattern.matches(Pattern.quote(literal), "123$45");
于 2013-08-05T00:42:44.507 回答