我想从 html 文件中动态删除特定标签及其内容,并考虑使用 preg_replace 但无法获得正确的语法。基本上它应该,例如,做类似的事情:用什么都替换(包括)“”之间的所有内容。
有人可以帮我解决这个问题吗?
我想从 html 文件中动态删除特定标签及其内容,并考虑使用 preg_replace 但无法获得正确的语法。基本上它应该,例如,做类似的事情:用什么都替换(包括)“”之间的所有内容。
有人可以帮我解决这个问题吗?
轻松的家伙。
要使用 Ungreedy 正则表达式,请使用 U 修饰符;要使其成为多行,请使用 s 修饰符。知道,要删除所有段落,请使用以下模式:
#<p[^>]*>(.*)?</p>#sU
解释 :
<p[^>]*>
: 检测开头段落的部分(带有假设风格,例如 )(.*)?
:一切(在“不贪婪模式”中)</p>
: 很明显,最后一段希望有帮助!
我建议不要尝试使用正则表达式来执行此操作。更安全的方法是使用类似的东西
这是 API 参考的链接: 简单的 HTML DOM API 参考
另一种选择是使用DOMDocument
这里的想法是使用真正的 HTML 解析器来解析数据,然后您可以移动/遍历树并删除您需要的任何元素/属性/文本。与尝试使用正则表达式替换 HTML 中的数据相比,这是一种更简洁的方法。
<?php
$doc = new DOMDocument;
$doc->loadHTMLFile('blah.html');
$content = $doc->documentElement;
$table = $content->getElementsByTagName('table')->item(0);
$delfirstTable = $content->removeChild($table);
echo $doc->saveHTML();
?>
如果您不知道标签之间的内容,Phill 的响应将不起作用。
如果两者之间没有其他标签,这将起作用,并且绝对是更简单的情况。显然,您可以用您需要的任何标签替换 div。
preg_replace('#<div>[^<]+</div>#','',$html);
如果中间可能有其他标签,这应该可以工作,但可能会导致问题。如果是这样,您可能最好使用上面的 DOM 解决方案
preg_replace('#<div>.+</div>#','',$html);
这些未经测试
如果您尝试清理数据,通常建议您使用白名单,而不是将某些术语和标签列入黑名单。这更容易清理和防止 XSS 攻击。有一个名为HTML Purifier的著名库,虽然它很大而且速度有些慢,但在净化数据方面有惊人的效果。
伪代码
function replaceMe($html_you_want_to_replace,$html_dom) {
return preg_replace(/^$html_you_want_to_replace/, '', $html_dom);
}
之前的 HTML
<div>I'm Here</div><div>I'm next</div>
<?php
$html_dom = "<div>I'm Here</div><div>I'm next</div>";
$get_rid_of = "<div>I'm Here</div>";
replaceMe($get_rid_of);
?>
HTML 之后
<div>I'm next</div>
我知道这是一个黑客工作