我正在为删除过度引用的论坛制作插件,因此只有一级引号:
<quote>
<quote>subquote</quote>
quote111
</quote>
text
<quote>quote222</quote>
text
<quote>subquote</quote>
应该删除,因为它在另一个引用中。
最好的方法是什么?我认为这很普遍,但我无法谷歌搜索。
这应该是一些疯狂的正则表达式。我无法解决这个问题。
I just did it with regexp, the easy way. Using negative lookeahead solved problem.
while ( preg_match("|<quote>((?!</quote>).)*?<quote>|us", $text) )
$text = preg_replace("@(<quote>(?(?!quote>).)*?)<quote>(?(?!quote>).)*?</quote>@us", "$1", $text);
It checks if any subquotes left and remove one subquote in a time.
如果您有XML,则使用它在每个<quote>
.
当您在循环中使用它时,您可以使用strip_tags()删除子引号。
您可以为此使用SimpleXML。
没有必要使用“疯狂的正则表达式”
此链接显示如何删除具有特定属性的项目,您可以使用它来满足您的需求。