Hay,我似乎无法在网上找到任何正则表达式来删除
<h1></h1>
标签(及其内容)。
任何人都可以帮助你。
答案 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;说工作多线。