如何使用preg_replace或类似工具来查找和替换标记匹配以下内容的所有实例:
我的内容中有很多这样的标签实例:
<span style="background-color: rgb(255, 255, 0);"></span>
<span style="background-color: rgb(125, 125, 0);"></span>
<span style="*"></span> (background-color could be anything...)
我怎样才能只移除那些在span标记之间没有任何东西的标记,而在span标记之间有内容的地方留下其他标记。
我想把这些移走。。。
<span style="background-color: rgb(255, 255, 0);"></span> (background-color is wild)
我想留下这些。。。
<span style="background-color: rgb(255, 255, 0);">Content...</span>
正如注释中提到的,domDocument
是完成这项工作的最佳工具。 您捕获所有span
元素,如果任何span元素没有子节点(包括文本节点),那么将其从DOM中删除。 最后,您需要savehtml
来转储HTML字符串。
代码段:
<?php
$html = '
<span style="background-color: rgb(255, 255, 0);">a</span>
<span style="background-color: rgb(125, 125, 0);">b<b>ldkf</b></span>
<span style="*"></span>';
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('span') as $span_node){
if($span_node->childNodes->length == 0){ // if no child nodes, then remove it
$span_node->parentNode->removeChild($span_node);
}
}
echo $dom->saveHTML();