PHP删除匹配模式或通配符模式的标记
如何使用preg_replace或类似工具查找和替换标记与以下内容匹配的所有实例: 我的内容中有很多这样的标签: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="*">&
<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)中代码>