我有一个这样的字符串:
<div class="container">
<h3 class="hdr"> Text </h3>
<div class="main">
text
<h3> text... </h3>
....
</div>
</div>
如何使用尽可能少的代码删除带有.hdr类的H3标记?
答案 0 :(得分:17)
尽可能使用小代码?最短的代码不一定是最好的。但是,如果您的HTML h3
标记总是看起来像这样,那就足够了:
$html = preg_replace('#<h3 class="hdr">(.*?)</h3>#', '', $html);
一般来说,使用正则表达式解析HTML并不是一个特别好的主意。
答案 1 :(得分:3)
这样的东西就是你要找的......
$output = preg_replace("#<h3 class=\"hdr\">(.*?)</h3>#is", "", $input);
在正则表达式的末尾使用“is”,因为它会使它不区分大小写,而且更灵活。
答案 2 :(得分:1)
尝试preg_match,然后尝试以下模式的preg_replace:
/(<h3
[\s]+
[^>]*?
class=[\"\'][^\"\']*?hdr[^\"\']*?[\"\']
[^>]*?>
[\s\S\d\D\w\W]*?
<\/h3>)/i
它很乱,只有当h3标签没有内联javascript时才能正常工作,这可能包含这个正则表达式会对其做出反应的序列。它远非完美,但在使用h3标签的简单情况下,它应该可以工作。
虽然没试过,可能需要调整。
另一种方法是复制该功能,使用你的副本,如果可能的话,不使用h3。
答案 3 :(得分:0)
$ content = preg_replace('〜(。*?)〜','',$ content);
以上代码仅在div有两个都在同一行时才有效。怎么样呢?
$ content = preg_replace('〜[^ |] *?〜','',$ content);
即使两者之间存在换行符,也能正常工作,但如果不这样使用则失败符号是介于谁之间知道更好的方式?
答案 4 :(得分:0)
如果上述解决方案不起作用,这将对某人有所帮助。它将删除带有标签“ -webkit-overflow-scrolling:touch;”的iframe和内容。就像我有:)
RegEx或正则表达式是您要删除的代码,PHP函数preg_replace()将删除所有匹配的div或div,或将其替换为其他内容。在下面的示例中,$ incoming_data是您在删除元素之前放置所有内容的位置,而$ result是最终产品。基本上,我们是在告诉代码查找所有带有class =“ myclass”的div并将其替换为“”(什么都没有)。
如何在PHP中按类删除div及其内容 只需将“ myclass”更改为您的div具有的任何类即可。
$result = preg_replace('#<div class="myclass">(.*?)</div>#', ' ',
$incoming_data);
如何在PHP中通过ID删除div及其内容 只需将“ myid”更改为您的div拥有的ID。
$ result = preg_replace('#(。*?)#','',$ incoming_data);
如果您的div有多个班级? 只需将“ myid”更改为您的div这样的ID即可。
$result = preg_replace('#<div id="myid(.*?)</div>#', ' ', $incoming_data);
or if div don’t have an ID, filter on the first class of the div like this.
$result = preg_replace('#<div class="myclass(.*?)</div>#', ' ', $incoming_data);
如何在PHP中删除所有标题 这是删除所有标题的方法。
$result = preg_replace('#<h1>(.*?)</h1>#', ' ', $incoming_data);
and if the heading have a class, do something like this:
$result = preg_replace('#<h1 class="myclass">(.*?)</h1>#', ' ', $incoming_data);
答案 5 :(得分:0)
通过Google偶然发现-对于使用正则表达式解析HTML感到不舒服的其他人,这是一个DOMDocument解决方案,让我觉得更加安全:
function removeTagByClass(string $html, string $className) {
$dom = new \DOMDocument();
$dom->loadHTML($html);
$finder = new \DOMXPath($dom);
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' {$className} ')]");
foreach ($nodes as $node) {
$node->parentNode->removeChild($node);
}
return $dom->saveHTML();
}
感谢this other answer的XPath查询。