PHP无法获得嵌套引号

时间:2012-08-11 20:59:02

标签: php nested bbcode quote

我正在尝试在BBcode类中实现嵌套引号。但还没有成功。

这是我试图实现的代码:

$string = '
[quote="test"]
    [quote="abc"]Test[/quote]
    test
[/quote]
Hello
';

function parseTagsRecursive($input)
{

    $regex = '#\[quote="(.*?)"]((?:[^[]|\[(?!/?quote=""])|(?R))+)\[/quote]#';

    if (is_array($input)) {
        $input = '<div style="background:#282828; padding:0; color:white;">
        <span style="display:block; background:#161616; margin-top:0; padding:5px;">' . $input[1] . ' wrote</span>
        <span style="display:block; padding:5px; font-style:italic; font-size:12px;">'. $input[2] . '</span>
    </div>';
    }

    return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}

$output = parseTagsRecursive($string);

echo $output;

这就是我到目前为止所得到的:

class BBCode {

    public $str;

    function parse() {

        $this->str = preg_replace_callback(
                '#\[quote="(.*?)"]((?:[^[]|\[(?!/?quote=""])|(?R))+)\[/quote]#', 
                array($this, 'nestedQuotes'), 
                $this->str);

        return $this->str;

    }

    function nestedQuotes($input) {
        if (is_array($input)) {
            $input = '<div style="background:#282828; padding:0; color:white;">
            <span style="display:block; background:#161616; margin-top:0; padding:5px;">' . $input[1] . ' wrote</span>
            <span style="display:block; padding:5px; font-style:italic; font-size:12px;">'. $input[2] . '</span>
        </div>';
        }
        return $input;
    }

}

$string = '
[quote="test"]
    [quote="abc"]Test[/quote]
    test
[/quote]
Hello
';

$b = new BBCode();
$b->str = $string;
echo $b->parse();

我希望有人可以帮忙解决这个问题。我搜索了很多,但没有找到解决问题的方法。

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找heredoc

答案 1 :(得分:0)

现在就开始工作了。

class BBCode {
    function parse() {
        $this->input = $this->nestedQuotes2($this->input);
    }

    function nestedQuotes2($input) {
        if (is_array($input))
            $input = '<div class="quote"><h2>' . $input[1] . ' skrev</h2><span class="txt">' . $input[2] . '</span></div>';
        return preg_replace_callback('#\[quote="(.*?)"]((?:[^[]|\[(?!/?quote=""])|(?R))+)\[/quote]#', array($this, 'nestedQuotes2'), $input);
    }
}