0

我有一些 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 中删除图像标签。

谢谢

4

2 回答 2

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() );
于 2012-06-28T08:11:36.707 回答
0

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 操作的文档

于 2012-06-28T08:18:27.467 回答