我正在尝试从字符串中删除以下模式:
<div class="main_title">Content 1</div>
其中“内容 1”可能因字符串而异。
以下似乎不起作用:
$output = preg_replace('<div class="main_title">.*</div>', " ", $output);
我错过了一些明显的东西吗?
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);
正如其他人在评论中所说,不要使用正则表达式来解析 HTML,而是使用 SimpleXML 或 DOMDocument。如果您还需要正则表达式,则需要将模式分隔符放入代码中:
$output = preg_replace('#<div class="main_title">.*</div>#', " ", $output);