正则表达式删除php中的li

时间:2010-08-31 10:19:59

标签: php

  

可能重复:
  PHP: Strip a specific tag from HTML string?

大家好,

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

$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);

2 个答案:

答案 0 :(得分:0)

这应该有效:

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

但请记住manipulate DOM有工具,而且不是regexp:)

答案 1 :(得分: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();