一尘不染

Java-匹配反斜杠和引号的正则表达式

java

如何编写一个正则表达式来匹配它\"(反斜杠然后是引号)?假设我有一个像这样的字符串:

<a href=\"google.com\"> click to search </a>

我需要将所有替换\"",因此结果如下所示:

<a href="google.com"> click to search </a>

这是行不通的:str.replaceAll("\\\"", "\"")因为它只匹配引号。不确定如何使用反斜杠。我本可以先删除反斜杠,但字符串中还有其他反斜杠。


阅读 390

收藏
2020-09-08

共1个答案

一尘不染

如果你 不需要任何像预定义的字符类\ d,量词等正则表达式的机制
,而不是replaceAll其预期正则表达式使用replace其预计文字

str = str.replace("\\\"","\"");

两种方法都将替换 所有 出现的目标,但是replace将按字面意义对待目标。


但是如果您真的 必须 使用正则表达式

str = str.replaceAll("\\\\\"", "\"")

\是正则表达式中的特殊字符(例如,用于创建\d-代表数字的字符类)。要将正则表达式\视为普通字符,您需要\在其前面放置另一个以关闭其特殊含义(您需要对其进行转义)。所以我们试图创建的正则表达式是\\

但是要创建表示形式的字符串,\\以便将其传递给正则表达式引擎,您需要将其编写为四\"\\\\"),因为\它也是String中的特殊字符(例如,可以用作\t制表符),因此您还需要在两者\之间进行转义。

换句话说,您需要转义\两次:

  • 一次在正则表达式中 \\
  • 然后在字符串中 "\\\\"
2020-09-08