Я хочу написать симплексный (состоящий из одного вызова preg_replace) форумный анализатор, и у меня возникают проблемы с вложенными тегами.
Например, если кто-то цитирует кого-то, цитируя кого-то, я не могу добиться правильного поведения.
При наличии:
[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]
и вторым [/quote]
.
Если я добавлю модификатор U
, он будет слишком неуклюжим - первыйТег [quote]
связан с первым (вложенным и неактуальным) тегом [/quote]
.
Спасибо за любую помощь!