如何使用preg_replace从html中删除特定的div

时间:2012-06-28 08:01:14

标签: php regex

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

由于

2 个答案:

答案 0 :(得分: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() );

答案 1 :(得分: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 manipulation

的文档