0

我正在为删除过度引用的论坛制作插件,因此只有一级引号:

<quote>
    <quote>subquote</quote>
    quote111
</quote>
text
<quote>quote222</quote>
text

<quote>subquote</quote>应该删除,因为它在另一个引用中。

最好的方法是什么?我认为这很普遍,但我无法谷歌搜索。

这应该是一些疯狂的正则表达式。我无法解决这个问题。

4

2 回答 2

0

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.

于 2013-07-11T14:49:41.667 回答
0

如果您有XML,则使用它在每个<quote>.

当您在循环中使用它时,您可以使用strip_tags()删除子引号。

您可以为此使用SimpleXML

没有必要使用“疯狂的正则表达式”

此链接显示如何删除具有特定属性的项目,您可以使用它来满足您的需求。

于 2013-07-11T13:13:37.840 回答