我正在尝试用注释替换特定div标签(id =“dd-header”)中的内容。尝试了几种方法和正则表达式。这是我最近的尝试:
$html = preg_replace('/(<div\sid=\"dd\-header\">)[^<]+(<\/div>)/i', '<!-- Comment -->', $html);
无法让它发挥作用。我在这里做错了什么?
注意: div标签还有多个标签
要替换的示例代码
<div id="dd-header">
<a id="logo-small" href="/" title="title"></a>
<a href="http://url/">Link 1</a> |
<a href="javascript: (function () {window.location = 'http://url=' + encodeURIComponent(window.location.href);})()">Link 2</a>
<!-- <a href="http://url">Image</a> | -->
| <a href="url">Link 3</a></div>
答案 0 :(得分:2)
$html = preg_replace('/(<div\sid="dd-header">)([^<]|<.+>.*<\/.+>)+(<\/div>)/i', '$1<!-- Comment -->$3', $html);
答案 1 :(得分:2)
虽然在简单的情况下你可以这样做,正如rabudde发布的那样,你不能用正则表达式做一般情况。它是正则表达式语言的一个限制,已在SO上广泛讨论。
当div包含子标签时,rabudde的代码会失效。
正确的方法是使用(X)HTML解析器解析树,找到div节点,删除它的子节点,并替换为您喜欢的任何内容。
答案 2 :(得分:0)
只需使用DOMDocument。它会将其解析为一个易于遍历,按ID搜索和操作的DOM。
请参阅文档,从loadHTML开始:http://docs.php.net/manual/en/domdocument.loadhtml.php