2010-08-31 77 views
0

可能重复:
PHP: Strip a specific tag from HTML string?正则表达式,除去李在PHP

大家好,

我想从一个字符串中删除华里。我正在使用以下正则表达式,但它不起作用。可能是什么问题?

$str = '<div id="navigation" ><div class="menuwrap"><ul><li><a href="#">Home 
</a></li><li class="select"><a href="#">About Us</a></li><li><a href="#">Services 
</a></li><li><a href="#">Clients</a></li><li><a href="#">Contact Us</a></li></ul> 
</div><div class="submenu"><ul><li><a href="#">Submenu1</a></li><li><a 
href="#">Submenu2</a></li><li><a href="#">Submenu3</a></li> 
<li><a href="#">Submenu4</a> 
</li></ul></div></div>'; 

$replacelink = 'Contact Us'; 

echo $str = preg_replace('/<li(.*?)>\s*\b<a(.*?)>\s*\b'.$replacelink.'\b\s*<\/a> 
\b\s*<\/li>/i', '', $str); 

回答

0

这应该工作:

echo preg_replace('/<li><a[^>]*>'.$replacelink.'<\/a><\/li>/s', '', $str); 

但请记住有工具来manipulate DOM这不是正则表达式:)

0

从正则表达式删除单词边界(\b)。此刻,您正在查找任何数量的空白,然后是<,然后是文字边界。在空格和<之间永远不会有文字边界。

在重复Using the solution,你应该能够使用:contains()的XPath选择这样做没有正则表达式:

$dom = new DOMDocument; 
$dom->loadHTML($str); 
$xPath = new DOMXPath($dom); 
$nodes = $xPath->query('//a:contains('.$replacelink.')'); 
if($nodes->item(0)) { 
    $li = $nodes->item(0)->parentNode; 
    $li->parentNode->removeChild($li); 
} 
$str = $dom->saveHTML();