PHP正则表达式删除一些不需要的div

时间:2012-11-09 12:12:02

标签: php html regex

我想删除包含字词commentshare的id或类的div(例如:<div id="comment"><div class="header-comment"><div id="comment-footer">,{{1我用的东西

<div class="social-share">

不行。如何做正确的正则表达式?以下是一些测试代码,我想删除preg_replace('/<div[^>]*(comment|share)[^>]*>(.*?)<\/div>/is', '', $htmls); 部分并保留commentcontent

footer

4 个答案:

答案 0 :(得分:2)

考虑使用DOMDocument函数来解析HTML,然后定位您不想要的divremove。这将更快,更容易理解和维护,并且写入速度可能更快。

答案 1 :(得分:1)

我认为您应该使用DomDocument尝试:

$dom = new DOMDocument();
$dom->loadHTML($htmls);
$remove = array("comment","share");
$removeList = array();
foreach ( $dom->getElementsByTagName("div") as $div ) {
    if (in_array($div->getAttribute("class"), $remove) || in_array($div->getAttribute("id"), $remove)) {
        $removeList[] = $div;
    }
}

foreach ( $removeList as $div ) {
    $div->parentNode->removeChild($div);
}

$dom->formatOutput = true;
echo "<pre>";
echo htmlentities($dom->saveHTML());

答案 2 :(得分:0)

  

如何正确使用正则表达式?

您可以first identifying all DIVs, extract their texts执行此操作,然后使用preg_match查看正则表达式模式的文本。

但是,您也可以使用正则表达式来保留该部分,只需使用 xpath 即可。在你的情况下,这更直截了当。

答案 3 :(得分:0)

请参阅此网站以测试您的REGEX   http://www.regexplanet.com/advanced/java/index.html