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

Sim*_*imo 21 java regex

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

<a href=\"google.com\"> click to search </a>
Run Code Online (Sandbox Code Playgroud)

我需要\"用a 替换所有",所以结果看起来像:

<a href="google.com"> click to search </a>
Run Code Online (Sandbox Code Playgroud)

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

Psh*_*emo 61

如果您要更换文字和不需要正则表达式的语法,而不是replaceAll使用replace

str = str.replace("\\\"","\"");
Run Code Online (Sandbox Code Playgroud)

这两种方法都将取代所有出现的目标,但replace会按字面意思处理目标.


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

str = str.replaceAll("\\\\\"", "\"")
Run Code Online (Sandbox Code Playgroud)

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

但是要创建字符串表示\\以便将其传递给正则表达式引擎,您需要将其写为four \("\\\\"),因为\它也是String中的特殊字符(它可以用于\t表示制表符),因此您还需要在\那里进行转义.

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

  • 一次在正则表达式 \\
  • 并且一次在String中 "\\\\"


Mik*_*uel 6

您不需要正则表达式.

str.replace("\\\"", "\"")
Run Code Online (Sandbox Code Playgroud)

应该工作得很好.

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

public String replace(CharSequence target,
                      CharSequence replacement)
Run Code Online (Sandbox Code Playgroud)

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