Я довольно невежествен, когда дело доходит до PHP и регулярных выражений, но я пытаюсь починить сломанный плагин для моего форума.
Я бы хотел заменить следующее:
<blockquote rel="blah">foo</blockquote>
С
<blockquote class="a"><div class="b">blah</div><div class="c"><p>foo</p></div></blockquote>
На самом деле, эта часть проста, и я уже частично исправил плагин, чтобы сделать это. Следующее регулярное выражение используется в вызове preg_replace_callback()
для выполнения замены:
/(<blockquote rel="([\d\w_ ]{3,30})">)(.*)(<\/blockquote>)/u
Код обратного вызова:
return <<<BLOCKQUOTE
<blockquote class="a"><div class="b">{$Matches[2]}</div><div class="c"><p>{$Matches[3]}</p></div></blockquote>
BLOCKQUOTE;
И это работает для моего приведенного выше примера (не вложенные цитаты). Однако , если кавычки вложены, например, в следующем примере:
<blockquote rel="blah">foo <blockquote rel="bloop">bar ...maybe another nest...</blockquote></blockquote>
Это не работает. Итак, мой вопрос, как я могу заменить все вложенные blockquotes, используя комбинацию regex / PHP? Я знаю, что в PHP возможны рекурсивные шаблоны с (?R)
; следующее регулярное выражение извлечет все вложенные цитаты из строки, содержащей их:
/(<blockquote rel="([\d\w_ ]{3,30})">)(.*|(?R))(<\/blockquote>)/s
Но с этого момента я не совсем уверен, что делать в обратном вызове preg_replace_callback()
, чтобы заменить каждую вложенную цитату на вышеуказанную замену.
Буду признателен за любую помощь.