如何编写正则表达式来匹配此\"
(反斜杠然后引用)?
假设我有一个这样的字符串:
<a href=\"google.com\"> click to search </a>
我需要用\"
替换所有"
,结果如下:
<a href="google.com"> click to search </a>
这个不起作用:str.replaceAll("\\\"", "\"")
因为它只与引用匹配。不知道如何绕过反斜杠。我可以先删除反斜杠,但我的字符串中还有其他的反斜杠。
答案 0 :(得分:55)
如果您 不需要任何正则表达式机制,如预定义字符类\ d,量词等。 而不是replaceAll
,它们需要使用正则表达式{{ 1}}期望文字
replace
这两种方法都会取代所有出现的目标,但str = str.replace("\\\"","\"");
会逐字处理目标。
但如果您真的 必须 使用正在寻找的正则表达式
replace
str = str.replaceAll("\\\\\"", "\"")
是regex中的特殊字符(例如用于创建\
- 表示数字的字符类)。要使正则表达式将\d
视为普通字符,您需要在其前面放置另一个\
以关闭其特殊含义(您需要将其转义)。所以我们试图创建的正则表达式是\
。
但要创建代表\\
的字符串以便将其传递给regex引擎,您需要将其写为四\\
(\
),因为"\\\\"
也是特殊的字符串中的字符(例如,它可以用作\
来表示制表符),因此您还需要在那里同时转义\t
。
换句话说,你需要两次逃避\
:
\
\\
答案 1 :(得分:6)
您不需要正则表达式。
str.replace("\\\"", "\"")
应该可以正常工作。
replace
方法接受两个子串,并用第二个替换第一个的非重叠出现。根据{{3}}:
public String replace(CharSequence target, CharSequence replacement)
将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。替换从字符串的开头到结尾,例如,将
"aa"
替换为字符串"b"
中的"aaa"
将导致"ba"
而不是"ab"
}。
答案 2 :(得分:0)
试试这个:str.replaceAll("\\\\\"", "\\\"")
因为Java会两次替换\
:
(1)\\\\\"
- &gt; \\"
(对于字符串)
(2)\\"
- &gt; \"
(适用于正则表达式)