26

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

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

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

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

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

4

3 回答 3

69

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

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

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


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

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

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

但是要创建表示文本的字符串文字\\,以便您可以将其传递给正则表达式引擎,您需要将其编写为四个\( "\\\\"),因为\它也是字符串文字中的特殊字符(使用 编写的代码的一部分"..."),因为它可以用于例如\t表示制表符。这就是为什么你也需要在\那里逃跑。

简而言之,您需要逃脱\两次:

  • 在正则表达式中\\
  • 然后在字符串文字中"\\\\"
于 2012-08-02T00:45:54.620 回答
6

You don't need a regular expression.

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

should work just fine.

The replace method takes two substrings and replaces all non-overlapping occurrences of the first with the second. Per the javadoc:

public String replace(CharSequence target,
                      CharSequence replacement)

Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence. 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" rather than "ab".

于 2012-08-02T01:05:31.483 回答
0

try this: str.replaceAll("\\\\\"", "\\\"")
because Java will replace \ twice:

(1) \\\\\" --> \\" (for string)
(2) \\" --> \" (for regex)

于 2012-08-02T01:06:05.663 回答