Я бы хотел поработать над фильтром bbcode для сайта php. (Я использую cakephp, это был бы помощник bbcode)
У меня есть некоторые требования.
Bb-коды могут быть вложенными. Так что-то подобное действительно.
[block]
[block]
[/block]
[block]
[block]
[/block]
[/block]
[/block]
Bb-коды могут иметь 0 или более параметров.
Пример:
[video: url="url", width="500", height="500"]Title[/video]
Bb-коды могут иметь многократное поведение.
Допустим, [url]text[/url]
будет преобразован в [url:url="text"]text[/url]
или видео bbcode сможет выбирать между YouTube, Dailymotion ....
Я думаю, что это покрывает большинство моих потребностей. Я уже что-то сделал с регулярным выражением. Но моей самой большой проблемой было сопоставление параметров. Фактически, я получил вложенный bbcode для работы и bbcode с 0 параметрами. Но когда я добавил регулярное выражение для параметров, оно не соответствовало вложенному bbcode правильно.
"\[($tag)(=.*)\"\](.*)\[\/\1\]"
// Это не было. * Но не готовый совпадать
У меня сейчас нет полного регулярного выражения, но у меня было нечто, похожее на это (см. Выше).
Так есть ли способ эффективно сопоставить bbcode с регулярным выражением или чем-то еще.
Единственное, о чем я могу думать, - это использовать шаблон посетителя и разделять текст по каждому возможному тегу таким образом, я могу иметь немного больше контроля над моим синтаксическим анализом и, возможно, могу проверить свой документ, так что если вводимый текст не не имеет действительного bbcode. Я мог бы уведомить пользователя с ошибкой перед сохранением чего-либо.
Я бы использовал sablecc для создания моего анализатора текста.
http://sablecc.org/
Есть идея получше? или что-нибудь, что может привести к эффективному гибкому парсеру bbcode?
Спасибо и извините за мой плохой английский ...