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

PHP删除匹配模式或通配符模式的标记,php,Php,如何使用preg_replace或类似工具查找和替换标记与以下内容匹配的所有实例: 我的内容中有很多这样的标签: <span style="background-color: rgb(255, 255, 0);"></span> <span style="background-color: rgb(125, 125, 0);"></span> <span style="*">&

如何使用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>
(背景色为野生色)
我想留下这些…

<span style="background-color: rgb(255, 255, 0);"></span> (background-color is wild)
<span style="background-color: rgb(255, 255, 0);">Content...</span>
内容。。。

如评论中所述,是此项工作的最佳工具。 捕获所有
span
元素,如果任何span元素没有子节点(包括文本节点),则将其从DOM中删除。最后,您需要转储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();

您确定要在PHP中执行此操作吗?你能首先描述一下这些是如何进入你的结构的吗?使用DOMDocument是一个选项吗?是的,它必须用PHP来完成。这是因为用户使用Summernote,需要清理内容。是的,DOMDocument是一个选项。将其加载到DOMDocument中,扫描空节点(即
->childNodes->length==0的节点)并将其删除。完成。Regex在这方面是100%错误的工具。此外,由于Regex是一种糟糕的做法,我在注释中添加了方法,而没有将其包含在我的答案
echo preg_替换('/','$html)中