大家好,
我想从字符串中删除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);
答案 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();