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

Php 如何使用preg_replace从html中删除特定div,php,regex,Php,Regex,我有一些html,我想用preg_replace删除带有内容的特定div标记 代码: 上述代码可以很好地从html中删除图像 谢谢你试试这个 $html = '<div class="time-trainer">Remove</div>'; // Show echo $html; // Remove echo preg_replace('~<div([^>]*)(class\\s*=\\s*["\']time-trainer["\'])([^>]

我有一些html,我想用preg_replace删除带有内容的特定div标记

代码:

上述代码可以很好地从html中删除图像

谢谢你试试这个

$html   = '<div class="time-trainer">Remove</div>';

// Show
echo $html;

// Remove
echo preg_replace('~<div([^>]*)(class\\s*=\\s*["\']time-trainer["\'])([^>]*)>(.*?)</div>~i', '', $html);
$html='Remove';
//展示
echo$html;
//除去
echo preg\u replace('~]*)(class\\s*=\\s*[“\']time trainer[“\'])([^>]*)>(.*?~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() );
$html='1!'

asdasdas

asdasdas

asdasdas

'; $dom=新的DOMDocument; $dom->loadHTML($html); $xpath=newdomxpath($dom); $pDivs=$xpath->query(“../div[@class='time-trainer']”); foreach($pDivs作为$div){ $div->parentNode->removeChild($div); } echo preg_replace(“/.*(....*/s)”、“$1”、$dom->saveHTML());
使用preg\u replace无法删除元素(并确保结果是有效的xml)

考虑以下示例:

dsadsa
<div class="time-trainer">
  adsadas
  <div>dsadas</div>
  dsa
  <div>das</div>
  dsadsa
</div>
ddsadas
dsadsa
阿德萨斯
达达斯
数字减影
达斯
dsadsa
ddsadas
正则表达式在语言理论中描述正则语言(L3),而XML则处于更高的级别(L1)


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

的文档,感谢您的回复,但它不起作用。您可以在此处查看页面的来源。它仍然显示htmlif中的div标记。如果我尝试使用DOM,它的“显示我”警告以及功能不起作用。请告诉我是否需要添加任何其他文件以启用DOM。文档中没有此类标记(computerhorse.com/admin1/fetch.php)。不,php的PCRE正则表达式库支持匹配嵌套结构,并且可以轻松匹配您引用的“不可能”示例(NET和Perl也是如此。请不要再说正则表达式是正则表达式了,它们不是正则表达式,而且已经很久没有了。可能确实有更可靠的方法来提取DIV结构(例如XML DOM),但说使用regex无法实现这一点是完全错误的。
$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() );
dsadsa
<div class="time-trainer">
  adsadas
  <div>dsadas</div>
  dsa
  <div>das</div>
  dsadsa
</div>
ddsadas