Pattern.matches("123$45","123$45") 返回 false,我推测是因为特殊的 $ 字符。
我的怀疑是逃避 $ 会让它通过
例如 Pattern.matches("123\$45","123\$45")
但这也失败了。
确保它们匹配的正确方法是什么?
Pattern.matches("123$45","123$45") 返回 false,我推测是因为特殊的 $ 字符。
我的怀疑是逃避 $ 会让它通过
例如 Pattern.matches("123\$45","123\$45")
但这也失败了。
确保它们匹配的正确方法是什么?
这是“规范”正则表达式\$
,但这里是 Java 字符串。在 Java 字符串中, a\
被写入"\\"
. 所以:
"123\\$45"
至于你的目标字符串,它只需要是"123$45"
.
如果您要查找的模式是固定模式,则手动转义该'$'
字符,使其不被视为正则表达式元字符;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");