Java中Pattern.compile(“\\\”“)和Pattern.compile(”\“”)之间的匹配有什么区别?

时间:2017-02-06 16:25:47

标签: java escaping pattern-matching

两者似乎都符合双引号。

我知道\*匹配正则表达式中的字符*,(http://www.digitalamit.com/article/regular_expression/2.phtml

由于*是一个特殊字符,反斜杠用于将其转义为正则表达式。

但双引号不是正则表达式的特殊字符。那为什么在双引号之前需要反斜杠。

在我的公司代码库中,他们使用Pattern.compile("\\\"")

1 个答案:

答案 0 :(得分:0)

根据我的经验,我认为在双引号之前不需要反斜杠,在大多数情况下它没有反斜杠:

System.out.println(Pattern.compile("^\"$").asPredicate().test("\""));

结果是真的

System.out.println(Pattern.compile("^\\\"$").asPredicate().test("\""));

结果是真的

System.out.println(Pattern.compile("^\\\"$").asPredicate().test("\\\""));

结果是假的。所以,如果你想匹配“你需要在你的正则表达式中添加双反斜杠:

System.out.println(Pattern.compile("^\\\\\"$").asPredicate().test("\\\""));

结果是真的。

如果你构建一个regexp字符串,它需要在每个双引号之前添加反斜杠,除非你不能匹配反斜杠+双引号。