0

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

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

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

以下似乎不起作用:

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

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

4

2 回答 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);
于 2013-05-28T21:50:34.677 回答
1

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

$output = preg_replace('#<div class="main_title">.*</div>#', " ", $output);
于 2013-05-28T21:49:35.223 回答