首先,我了解Simple HTML Dom解析器和PHP的内置解决方案,它们都没有完全按照我要求的那种工作(不是我所知)。
我正在寻找PHP的PCRE,它将在DOM中找到元素和所属内容,如果标记包含任何额外的空格,则删除它并原谅。
这是代码:
<div id="maindiv">
<div class="unusefuldiv1">Unuseful content</div>
<div id="unusefuldiv2">Unuseful content2</div>
<!-- ... some content I'm after for -->
</div>
我非常渴望正则表达式模式将删除.uunusefuldiv1和#unusefuldiv2(与内容一起标记)并且(如果可能的话)足够灵活地完成工作,如果,
例如<div class="unusefuldiv1">
稍有错误,有额外的空格:<div class="unusefuldiv1" >
。
这可能与类似到
preg_replace('/<div\b[^>]*>(.*?)<\/div>/is', '', $dom_content);
除了这个模式将删除所有div,不管是某些类,id还是没有。
有没有人有解决方案?
答案 0 :(得分:2)
这里没有理由不使用专用的DOM解析器:
$dom = new DOMDocument();
$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
$id = 'unusefuldiv2';
$classname = 'unusefuldiv1';
$query = "//div[@id='$id']|//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]";
foreach ($xpath->query($query) as $node) {
$node->parentNode->removeChild($node);
}
echo $dom->saveHTML();
答案 1 :(得分:1)
$dom_content = preg_replace(
'/\s*<div [^<>]*unuseful[^<>]+>.*?<\/div\s*>\s*/is', '', $dom_content );
将删除其开头标记包含单词unuseful的div(及周围的空格)。
要获得更好的正则表达式解决方案,您需要更好地描述删除div的条件。