PHP正则表达式删除<h1>标签(及其内容)</h1>

时间:2010-05-26 09:03:41

标签: php regex

Hay,我似乎无法在网上找到任何正则表达式来删除

<h1></h1>

标签(及其内容)。

任何人都可以帮助你。

6 个答案:

答案 0 :(得分:6)

请勿使用正则表达式,请使用PHP Simple HTML DOM之类的工具。

// Construct dom from string
$dom = str_get_html($html);

// ...or construct dom from file/url
$dom = file_get_html($path);

// strip h1 tags (and their content)
foreach ($dom->find('h1') as $node) {
    $node->outertext = '';
}

答案 1 :(得分:4)

preg_replace('@<h1[^>]*?>.*?<\/h1>@si', '', $htmlsource);

答案 2 :(得分:4)

你找不到一个,因为没有。

正则表达式不适合此任务,因为<h1>标记可以任意嵌套。 (编辑:Tomalak指出他们不被允许,但现实是邪恶的)。请尝试使用HTML解析器。

如果您可以确定文档中没有任何内容可以像<h1>Foo <h1> Bar</h1></h1>一样构建,那么Turbod的表达式将起作用。

修改 根据您的情况,像h1 { display: none !important; }这样的CSS样式可能会起作用。

答案 3 :(得分:4)

您还可以使用PHP's DOM extension module

$domDocument = new DOMDocument;
$domDocument->loadHTMLFile('http://example.com');
$domNodeList = $domDocument->getElementsByTagname('h1');
$domElemsToRemove = array();
foreach ($domNodeList as $domElement) {
    $domElemsToRemove[] = $domElement;
}
foreach($domElemsToRemove as $domElement) {
    $domElement->parentNode->removeChild($domElement);
}
var_dump($domDocument->saveHTML());

答案 4 :(得分:1)

为什么不使用strip_tags

答案 5 :(得分:0)

如果你想使用正则表达式,这对我有用:

$str = preg_replace("/<h1>.*?<\/h1>/si", '', $str);

问号将标签之间的内容切换为非贪婪。这对于你有多个h1标签的情况是必要的,所以它总是只取每个h1标签之间的内容,而不是在第一次打开[h1]和最后一次关闭[/ h1]之间删除所有内容

&#39;我&#39;修饰符表示忽略大写/小写差异,并且&#39; s&#39;说工作多线。