嵌套我的报价跨度

时间:2017-03-03 18:30:28

标签: php html

好的,所以我有一个引用设计,它看起来像这样:

<div id="post_IDHERE">
    <span class="quote">
        <span class="quote_author">An author:</span><br>
        <span class="quote_text">Some text quoted</span>
    </span>
    Some comment on the quote.
</div>

我的PHP代码将[quote]标签转换为已发布的^引用设计。

$data['comment'] = preg_replace("/\[quote=(.*?)\](.*?)\[\/quote\]/", "<span class='quote'><span class='quote_author'>Skriven av $1:</span><br><span class='quote_text'>\"$2\"</span></span><br><br>", $data['comment']);

我有两个问题。一个是我的引用JS函数,但我将从我的PHP(?)问题开始。

基本上,如果$ data [&#39; comment&#39;]包含:

[quote=test]test[/quote]
test quote

它会发布:

blabla

但张贴:

[quote=test][quote=test]test1[/quote]test2[/quote]
test3

文章:

lalala

所以我认为我的正则表达式并没有按我的意愿行事?

这是一个显示嵌套注释的JSfiddle: http://jsfiddle.net/n74djvq2/7/

1 个答案:

答案 0 :(得分:0)

您的正则表达式只查找[quote=*] * [/quote]模式,因此它会在它看到的第一个[/quote]结束。

如果你真的需要嵌套引号的功能,你应该寻找递归正则表达式模式,而不仅仅是简单版本。

或者如果您觉得困难,可以使用函数而不是正则表达式。