Java – 正则表达式,用于匹配反斜杠后跟引号

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

  click to search  

我需要替换所有的\" with a " ,所以结果如下:

  click to search  

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

如果要替换文字并且不需要regex语法而不是replaceAll使用replace

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

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


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

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

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

但要创建表示\\字符串,以便将其传递给regex引擎,您需要将其写为四\"\\\\" ),因为\也是字符串中的特殊字符(例如,它可以用作\t表示制表符)所以你还需要逃避\那里。

换句话说,你需要逃脱\两次:

  • 一次在正则表达式\\
  • 和一次在字符串"\\\\"

您不需要正则表达式。

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

应该工作得很好。

replace方法有两个子串,并用第二个替换第一个非重叠的出现。 根据javadoc :

 public String replace(CharSequence target, CharSequence replacement) 

将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。 替换从字符串的开头到结尾,例如,在字符串"aaa"中将"aa"替换为"b" "aaa"将导致"ba"而不是"ab"

试试这个: str.replaceAll("\\\\\"", "\\\"")
因为Java会替换\两次:

(1) \\\\\" – > \\" (对于字符串)
(2) \\" – > \" (正则表达式)