2012-09-13 70 views
1

我嘗試了很多方法來做到這一點。對於正則表達式我完全陌生。 我想將所有img src鏈接替換爲其他鏈接。正則表達式如何替換img標籤中的src鏈接

我的html文件,只是有這樣的:

<img src="01"></img><img src="02"></img><img src="03"></img> 

,或者它會是這樣:

< img src = "01"></img>< img src="02">< img src = "03"></img> 

有可能是空間或者只是沒有 「</img>

,我想他們就像這樣:

<div><p><DIV class="a"><img src="01"></img></p></div><div><p><DIV class="a"><img src="02"></img></p></div><div><p><DIV class="a"><img src="03"></img></p></div> 

,我用它來獲得IMG SRC鏈接:

  Pattern p = null; 
      Matcher m = null; 
      p = Pattern.compile("<img[^>]*src\\s*=\\s*\"([^\"]*)"); 
      m = p.matcher(mystr); 
      while (m.find()) { 
       imgIDList.add(m.group(1)); 
      } 

,我所做的STR列表替換: ArrayList的imgList4Replace =新的ArrayList();

,我用這個藉口替換:

   mystr.replace(("<img[^>]*src\\s*=\\s*\""+imgListReplaceOriginal.get(nIndex)+"([^\"]*)"), imgList4Replace.get(nIndex)+"$2"); 

它只是不工作。我花了很多時間來測試。

而且需要你的幫助。 非常感謝。

+0

[與string.replace](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replace%5C %28java.lang.CharSequence,%20java.lang.CharSequence%5C%29)方法不適用正則表達式。您應該使用[replaceAll](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29)或[replaceFirst](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceFirst%28java.lang.String,%20java.lang.String%29)而不是 – cubanacan

+0

作爲附註 - 圖像不應該有結束標記。他們應該總是自我關閉:'' – MrMisterMan

回答

5

你不能可靠地使用HTML/XML的正則表達式。你需要一個HTML解析器,如混淆的命名JTidy(雖然它自稱是一個HTML漂亮的打印機,它也給你一個DOM視圖上您的文檔)

+0

對不起,也許我不解釋清楚。 – AmyWuGo

+0

我只是想讓字符串和字符串將被添加到一個HTML文件。這是爲Android的webview,所以..... – AmyWuGo

+1

我不認爲我可以更清晰。您無法可靠地使用HTML/XML的正則表達式! –

0

給你:

private static String replaceSrcs(String str, List<String> srcs) { 
    Pattern p = Pattern.compile("(<\\s*img\\s*src\\s*=\\s*\").*?(\"\\s*>)"); 
    Matcher m = p.matcher(str); 
    StringBuffer sb = new StringBuffer(); 
    int i = 0; 
    while (m.find()) { 
     m.appendReplacement(sb, "$1" + srcs.get(i++) + "$2"); 
    } 
    m.appendTail(sb); 
    return sb.toString(); 
} 

現在,你只需要調用它:

replaceSrcs(mystr, imgList4Replace); 

並返回你喜歡什麼。

+0

你好Cubanacan,謝謝你的代碼,我試過了,在我的情況下,它似乎不起作用。我打算向我的老闆報告,並改變我的方式。 – AmyWuGo

+0

@AmyWuGo提到的案例通過這種方法成功地測試。爲什麼不高調呢。 – cubanacan

3

下面是代碼:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 


public class ImgTest { 
    public static void main(String[] args) { 

      String s = "This is a sample<img src=\"test.html\" /> text"; 
      Pattern p = Pattern.compile("[<](/)?img[^>]*[>]"); 
      Matcher m = p.matcher(s); 
      if (m.find()) { 
       String src = m.group(); 
       System.out.println(src); 
      } 
      s = s.replaceAll("[<](/)?img[^>]*[>]", ""); 
      System.out.println(s); 
    } 
} 
相關問題