提问者:小点点

PHP删除匹配模式或通配符模式的标记


如何使用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>

共1个答案

匿名用户

正如注释中提到的,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();