首页 > 解决方案 > 为什么这两个 java.util.Pattern 不相等

问题描述

我有两个使用 java.util.regex.Pattern.compile 的正则表达式。第一个是:

input[\\s\\w=:'\\-"]*type\\s*=\\s*['"]password['"];

第二个是:

input[\\s\\w=:'\\-\\\"]*type\\s*=\\s*['\\\"]password['\\\"];

这两个正则表达式之间的唯一区别是转义后一个字符串中的双引号。"和\"指的是同一个ASCII字符",所以它们得到相同的匹配结果。

但是,当我执行以下代码时,它返回 False。

Pattern p1=Pattern.compile("input[\\s\\w=:'\\-"]*type\\s*=\\s*['"]password['"]");
Pattern p2=Pattern.compile("input[\\s\\w=:'\\-\\\"]*type\\s*=\\s*['\\\"]password['\\\"]");
System.out.println(p1.equals(p2));

标签: javaregexpattern-matching

解决方案


在 Java 8Pattern中,类不会覆盖equals. 所以它使用默认实现来检查引用是否指向内存中的相同位置。


推荐阅读