匹配反斜杠后跟引号的正则表达式

新手上路,请多包涵

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

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

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

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

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

原文由 Simo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 553
2 个回答

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

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

这两种方法都将替换 所有 出现的目标,但 replace 将逐字处理目标。


但是如果你真的 必须 使用你正在寻找的正则表达式

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

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

但是要创建代表文本的字符串文字 \\ 这样你就可以将它传递给正则表达式引擎,你需要将它写成四个 \ ( "\\\\" ), 因为 \ ), --- 也是字符串文字中的特殊字符(使用 "..." 编写的部分代码)因为它可以用作例如 \t 这就是为什么您还需要在那里转义 \ 的原因。

简而言之,您需要转义 \ 两次:

  • 在正则表达式中 \\
  • 然后在字符串文字中 "\\\\"

原文由 Pshemo 发布,翻译遵循 CC BY-SA 4.0 许可协议

你不需要正则表达式。

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

应该工作得很好。

replace 方法采用两个子字符串并将第一个子字符串的所有非重叠出现替换为第二个子字符串。根据 javadoc

 public String replace(CharSequence target,
                      CharSequence replacement)

用指定的文字替换序列替换此字符串中与文字目标序列匹配的每个子字符串。 The replacement proceeds from the beginning of the string to the end, for example, replacing "aa" with "b" in the string "aaa" will result in "ba" 而不是 "ab"

原文由 Mike Samuel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题