-2

首先,我知道 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 或没有。

有没有人有解决方案?

4

2 回答 2

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

演示:http ://eval.in/11108

于 2013-02-23T16:47:47.567 回答
1
$dom_content = preg_replace( 
    '/\s*<div [^<>]*unuseful[^<>]+>.*?<\/div\s*>\s*/is', '', $dom_content );

将删除开始标签包含单词 unuseful 的 div(和周围的空格)。

要获得更好的正则表达式解决方案,您需要更好地描述删除 div 的标准。

于 2013-02-23T17:02:49.040 回答