簡體   English   中英

Java - 匹配反斜杠后跟引號的正則表達式

[英]Java - regular expression to match a backslash followed by a quote

如何編寫一個正則表達式來匹配這個\\" (一個反斜杠然后一個引號)?假設我有一個這樣的字符串:

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

我需要將所有\\"替換為" ,因此結果如下所示:

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

這個不起作用: str.replaceAll("\\\\\\"", "\\"")因為它只匹配引號。 不知道如何繞過反斜杠。 我本可以先刪除反斜杠,但我的字符串中還有其他反斜杠。

如果您不需要任何正則表達式機制,如預定義的字符類 \\d、量詞等,而不是期望正則表達式的replaceAll ,請使用期望文字的replace

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

兩種方法都將替換所有出現的目標,但replace將按字面意思處理目標。


但是如果你真的必須使用你正在尋找的正則表達式

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

\\是正則表達式中的特殊字符(例如用於創建\\d - 表示數字的字符類)。 要使正則表達式將\\視為普通字符,您需要在它之前放置另一個\\以關閉其特殊含義(您需要對其進行轉義)。 所以我們試圖創建的正則表達式是\\\\

但是要創建表示\\\\字符串以便您可以將其傳遞給正則表達式引擎,您需要將其寫為四個\\ ( "\\\\\\\\" ),因為\\也是字符串中的特殊字符(例如,它可以用作\\t代表制表符)所以你還需要在那里轉義\\

換句話說,您需要轉義\\兩次:

  • 一次在正則表達式\\\\
  • 一次在字符串"\\\\\\\\"

您不需要正則表達式。

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

應該工作得很好。

replace方法采用兩個子字符串,並用第二個替換第一個的所有非重疊出現。 根據javadoc

 public String replace(CharSequence target, CharSequence replacement)

用指定的文字替換序列替換此字符串中與文字目標序列匹配的每個子字符串。 替換從字符串的開頭到結尾進行,例如,將字符串"aaa"中的"aa"替換為"b" "aaa"將導致"ba"而不是"ab"

試試這個: str.replaceAll("\\\\\\\\\\"", "\\\\\\"")
因為 Java 會替換\\兩次:

(1) \\\\\\\\\\" --> \\\\" (用於字符串)
(2) \\\\" --> \\" (用於正則表達式)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM