Как разобрать цитируемый пост из vBulletin?

Используя PHP, как я могу преобразовать:

[QUOTE=Username;1234]This is the text being quoted[/QUOTE]

В:

<div class="quote"><a href="./linktopost?id=1234>Posted by: Username</a><p>This is the text being quoted.</p></div>

Обратите внимание, где сопоставляются текст Имя пользователя, 1234 id и Этот текст в кавычках.

Я знаю, как сделать начало и конец, просто заменив (например, str_replace) любой экземпляр:

[QUOTE= >>> <div class="quote">< href="./linktopost.php?id=

[/QUOTE] >>> </p><div>

но я не знаю, как извлечь имя пользователя, идентификатор сообщения и цитируемый текст, чтобы связать их все вместе.

Если это поможет, из того, что я могу сказать выше, имя пользователя может быть извлечено между разделителями [QUOTE= и ;, идентификатор сообщения может быть извлечен между ; и ], а текст может быть извлечен между ] и [/QUOTE], но я не знать, как их извлечь.

Кроме того, что произойдет, если в цитате есть цитата? Решение должно работать и в этих случаях.

Любые идеи?


person ProgrammerGirl    schedule 14.09.2012    source источник
comment
Если вы хотите разобрать BBCode, вам будет проще использовать что-то вроде парсер PEAR.   -  person John C    schedule 14.09.2012
comment
@John C: Спасибо, но синтаксический анализатор PEAR, похоже, не обрабатывает теги [QUOTE]. Любые другие идеи?   -  person ProgrammerGirl    schedule 14.09.2012


Ответы (1)


Это может помочь ;)

$str = "[QUOTE=Username;1234]This is the text being quoted[/QUOTE]";

if(preg_match('/\[QUOTE=([^;]+);([0-9]+)\]([^\[]+)\[\/QUOTE\]/i', $str, $matches)){
    echo "<br>USERNAME : ".$matches[1];
    echo "<br>POST ID : ".$matches[2];
    echo "<br>MESSAGE : ".$matches[3];
}
person Zepekigno    schedule 17.09.2012