PHP preg_replace()

时间:2013-05-28 21:37:12

标签: php regex

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

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

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

以下似乎不起作用:

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

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

2 个答案:

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

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

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