嵌套引号preg_replace regex

时间:2016-01-25 09:40:32

标签: php regex

我目前有以下正则表达式:

\[quote="([^"]+)"\]([^[]+)\[\/quote\]

哪个匹配字符串中的[quote="author"]text[/quote]并捕获authortext以将其转换为格式化的div引号:

$p_text = preg_replace('/\[quote="([^"]+)"\]([^[]+)\[\/quote\]/', '<div class="quote"><strong class="quote-author">$1 wrote:</strong><br>$2</div>', $p_text);

但是我希望能够嵌套一次,如下所示:

[quote="b"]

    [quote="a"]
        Original text
    [/quote]

Reply to quote a
[/quote]

Reply to quote b

以下是我希望它的外观:

enter image description here

以下是上述代码的目前情况:

enter image description here

如何嵌套引号?

1 个答案:

答案 0 :(得分:1)

您可以使用循环从内到外使用当前正则表达式解决它。

$pattern = '/\[quote="([^"]+)"\]([^[]+)\[\/quote\]/';
$replace = '<div class="quote"><strong class="quote-author">' .
           '$1 wrote:</strong><br>$2</div>';
do {
  $p_text = preg_replace($pattern, $replace, $p_text, -1, $replace_count);
} while($replace_count > 0);

See demo at eval.in。如果您因任何原因需要recursive regex see this demo at regex101