【问题标题】:How to delete a particular div from html using preg_replace如何使用 preg_replace 从 html 中删除特定的 div
【发布时间】:2025-12-13 06:50:02
【问题描述】:

我有一些 html,我想使用 preg_replace 删除包含内容的特定 div 标签。

代码:

<div class="time-trainer"> sjdgj</div>

我想删除具有class="time-trainer" 的 div 并同时删除内容。

preg_replace 可以很好地从 html 中删除图像标签,但是我们如何使用 div 来做同样的事情

$rmvimgfromdata = preg_replace("/<img[^>]+\>/i", "",  $data); 

上面的代码可以很好地从 html 中删除图像标签。

谢谢

【问题讨论】:

    标签: php regex


    【解决方案1】:

    试试这个

    $html   = '<div class="time-trainer">Remove</div>';
    
    // Show
    echo $html;
    
    // Remove
    echo preg_replace('~<div([^>]*)(class\\s*=\\s*["\']time-trainer["\'])([^>]*)>(.*?)</div>~i', '', $html);
    

    更新

    使用 DOM

    $html   = '<div class="time-trainer">
                    <p class="fifths">asdasdas</p>
                    <p class="hundredths">asdasdas</p>
                    <p class="winner-info">asdasdas</p>
                </div>';
    
    
    $dom = new DOMDocument;
    $dom->loadHTML( $html );
    
    $xpath = new DOMXPath( $dom );
    $pDivs = $xpath->query(".//div[@class='time-trainer']");
    
    foreach ( $pDivs as $div ) {
      $div->parentNode->removeChild( $div );
    }
    
    echo preg_replace( "/.*<body>(.*)<\/body>.*/s", "$1", $dom->saveHTML() );
    

    【讨论】:

    • 感谢您的回复,但它无法正常工作,您可以在此处查看页面来源computerhorse.com/admin1/fetch.php 它仍然在 html 中显示该 div 标签
    • 如果我尝试使用 DOM,它会向我显示警告以及功能不起作用。告诉我是否需要添加任何其他文件以启用 DOM
    • 文档中没有这样的标签(computerhorse.com/admin1/fetch.php)。
    【解决方案2】:

    使用 preg_replace 无法删除元素(并确保结果是有效的 xml)。

    考虑以下示例:

    dsadsa
    <div class="time-trainer">
      adsadas
      <div>dsadas</div>
      dsa
      <div>das</div>
      dsadsa
    </div>
    ddsadas
    

    正则表达式在语言理论中描述了正则语言 (L3),而 XML 则处于更高的层次 (L1)。

    要修改 XML 文件,您应该使用 xml 解析器,并使用它删除/添加/修改元素。阅读有关XML manipulation的文档

    【讨论】:

    • 不,PHP 的 PCRE 正则表达式库支持匹配嵌套结构,并且可以轻松匹配您引用的“不可能”示例(.NET 和 Perl 也是如此。请停止说正则表达式是正则表达式,它们不是并且很久很久没有了。可能确实有更可靠的方法来提取DIV结构(例如XML DOM),但要说使用它不可能实现正则表达式是错误的。