2013-05-28 48 views
-3

所有div我需要刪除含有正則表達式刪除包含定義字符串

<img src="/mapfiles/ 

例如,我有所有李:

<li class="g"><span>Text</span></li> 
<li class="g"><span>Text<img src=\"/mapfiles/iconA.png\"></span></li>**- I need remove it** 
<li class="g"><span>Text<img src=\"/mapfiles/iconB.png\"></span></li>**- I need remove it** 
<li class="g"><span>Text</span></li> 

我嘗試使用這樣的:

preg_replace('!<li class="g">(.*)<img src="/mapfiles/(.*)</li>!is', '', $content); 

但正則表達式首先匹配< li class =「g」>並且最後</li>如此刪除所有< li>,怎麼可以我寫正則表達式來找到最近的</li>?

+4

再次,我們不處理'用正則表達式HTML',我們使用HTML的解析器。正則表達式不適合這個。 – Aquillo

+0

請參閱http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags討論正則表達式vs(x)html。 – Sysyphus

+0

再次強制使用解析器參數。有時這是不可能的,正則表達式是唯一的選擇。 – SpongeBobPHPPants

回答

4

THE PONY HE COMES...

使用解析器:

$dom = new DOMDocument(); 
$dom->loadHTML($content); 
$xpath = new DOMXPath($dom); 
$remove = $xpath->query("//li[.//img[starts-with(@src,'/mapfiles/')]]"); 
foreach($remove as $r) $r->parentNode->removeChild($r); 
$output = substr($dom->saveHTML($dom->getElementsByTagName('body')->item(0)),6,-7); 
相關問題