只是一个想法...
您是否考虑过 PHP XPath 查询?
// CSS 不重要
<style>
div { border:1px solid rgba(255,0,0,0.5); background:rgba(255,0,0,0.1) }
span{ border:1px solid rgba(0,255,0,0.5); margin:0px 2px; padding:0 20px;
background:rgba(0,255,0,0.5)}
</style>
// PHP 你的 HTML,在这个例子中是一个字符串。
<?php
$string = '
<div>
<span id="keep"> John </span>
<span id="keep"> Susane </span>
<span id="todelete"> Tree </span>
<span id="keep"> Karin </span>
<span id="keep"> Jack </span>
</div>
';
echo $string;
// PHP 开始新的类 DOMDocument 并进行查询
$doc = new DOMDocument;
@$doc->loadHTML($string);
$xpath = new DOMXPath($doc);
$found = $xpath->query("//span[contains(@id, 'todelete')]");
// 更多PHP 我无法很好地解释这一点。我希望别人可以吗?
// 但是查询找到了包含属性 id 和 'todelete' 的跨度
// 我猜它输出为 HTML
$element = $found[0]->ownerDocument->saveXML($found[0]);
/* ##### <span id="todelete"> Tree </span> ##### */
echo '<p>delete:' . $element . '<p>';
//最后PHP 替换你的字符串中你发现的什么都没有
echo str_replace($element, '' , $string);
?>
我希望它有用。XPath 非常强大并且经常被遗忘。试试看。我希望它足以满足您的需求。您可以复制上面的所有代码并将其粘贴到 .php 文档中。