我想編寫symple(包含一個preg_replace調用)論壇分析器,我遇到嵌套標籤的問題。PHP PCRE - 正確的嵌套標籤行爲
例如如果有人引用某人的話,我就無法達到正確的行爲。
當具有:
[quote=Tom]
[quote=Jerry]
Lorem
[/quote]
Ipsum
[/quote]
Dolor.
我想是這樣的:
<blockquote>
<p><strong>Tom wrote</strong></p>
<blockquote>
<p><strong>Jerry wrote:</strong></p>
<p>Lorem</p>
</blockquote>
Ipsum
</blockquote>
Dolor.
我有這樣的代碼:
preg_replace('~\[quote (.+)\](.+)\[/quote\]~is', '<blockquote><p><strong>$1</strong> wrote:</p><p>$2</p></blockquote>', $value);
這個版本是貪婪。如果我有兩個獨立的塊,則正則表達式會覆蓋第一個[quote]
和第二個[/quote]
之間的所有文本。
如果我添加了U
改性劑,它太ungreedy - 第一[quote]
標籤與第一(嵌套和不相關)[/quote]
標籤配對。
感謝您的幫助!
您可能需要查看遞歸正則表達式,它可以處理該問題,或者實際使用/創建解析器,而不是僅依賴於正則表達式。 – Orbling 2011-02-24 16:05:04
嗨,giyf:http://stackoverflow.com/questions/2909588/regex-bbcode-perfecting-nested-quote – soju 2011-02-24 16:07:45