2013-11-20 72 views
0

我想寫一個正則表達式,用雙星**代替和字符(&),但只包含在HTML HREF屬性(絕對或相對)內。另外,我需要它充分"&"正則表達式替換&,但只在一個鏈接內

所以匹配,例如,以下HTML塊:

<p>Ben & Jerry is <a href="http://www.domain.com?a=1&b=2&amp;c=3">cool</a></p> 
<p>Ben & Jerry is <a href="/index.htm?a=1&b=2&amp;c=3">cool</a></p> 

將成爲

<p>Ben & Jerry is <a href="http://www.domain.com?a=1**b=**c=3">cool</a></p> 
<p>Ben & Jerry is <a href="/index.htm?a=1**b=2**c=3">cool</a></p> 

我可以全部替換 「&」 S和所有"&amp;" s,但是我的問題包含在鏈接中。

任何人都可以幫忙嗎?

+0

顯示您嘗試 – HamZa

+0

是否有使用正則表達式是什麼?使用HTML解析器可能會更好。 –

+0

我可以想象使用模式和匹配器 MightyPork

回答

2

您可以使用此:

String html = "<p>Ben & Jerry is <a href=\"http://www.domain.com?a=1&b=2&amp;c" 
      + "=3\">cool</a></p>\n<p>Ben & Jerry is <a href=\"/index.htm?a=1&b" 
      + "=2&amp;c=3\">cool</a></p>"; 
String pattern = "(?i)" + // case insensitive modifier 
      "(" + // open the capturing group 1 
       "(?:" + // open a non capturing group 
        "<a\\s[^>]*?\\bhref\\s*=\\s*[\"']?" + // content until the href attribute value 
        "|" + // OR 
        "\\G(?<!^)" + // contiguous to a precedent match 
       ")" + // close the non capturing group 
       "[^\\s\"'&>]++" + // value content that is not a & 
      ")" + // close the capturing group 1 
      "&(?:amp;)?"; // & with optional "amp;" 
String res = html.replaceAll(pattern, "$1**"); 
System.out.println(res); 
+0

對不起,這裏的回覆很拖延,我已經離開了。這就像一個魅力,我真的很感謝解釋。謝謝你的一切 – Typhoon101

+0

@ Typhoon101:不客氣。 –