从 HTML 文档中删除具有特定类的 div 元素

问题描述 投票:0回答:2

我正在尝试从字符串中删除以下模式:

<div class="main_title">Content 1</div> 

其中“内容 1”可能因字符串而异。

以下似乎不起作用:

$output = preg_replace('<div class="main_title">.*</div>', " ", $output);

我错过了一些明显的东西吗?

php html-parsing sanitization removechild
2个回答
3
投票

DOM 方法可能更优越,因为您不必担心区分大小写、空格等问题。

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//div[@class="main_title"]') as $node) {
    $node->parentNode->removeChild($node);
}
$output = $dom->saveHTML();

可以使用正则表达式,特别是如果您可以相信您的输入将遵循非常特定的格式(没有额外的空格,也许没有大小写差异等)。您的主要问题是缺少 PCRE 分隔符。

$output = preg_replace('@<div class="main_title">.*?</div>@', '', $output);

1
投票

正如其他人在评论中所说,不要使用正则表达式来解析 HTML,而是使用 SimpleXML 或 DOMDocument。如果您还需要正则表达式,则需要将模式分隔符放入代码中:

$output = preg_replace('#<div class="main_title">.*</div>#', " ", $output);
© www.soinside.com 2019 - 2024. All rights reserved.