2013-05-28 49 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); 
相关问题