Задать вопрос
iwqn
@iwqn
Программист-самоучка

Как составить регулярное выражение для сложного bb-кода?

У меня на сайте формируется следующий bb тег

[br][img src="images/20150429064557608.jpg" width="1500" class="Название класса" alt="Заголовок картинки"][br]

Все параметры включая ширину и название класса могут меняться, но это не суть важно.

Некоторых параметров может вообще не быть, например отсутствовать alt

[br][img src="images/20150429064557608.jpg" width="1500" class="Название класса"][br]

Нужно перевести этот сложный bb код с помощью регулярного выражения в html тег, корректно, и так, чтобы исключить взлом через него.

Прошу в этот раз помочь мне написать эту регулярку (готовый рецепт), и потом дать какую-нибудь литературу на тему регулярок для чайников (гугл рулит), а то мне уже стыдно просить людей помогать составлять регулярки. Обещаю что дальше буду разбираться с ними сам...
  • Вопрос задан
  • 545 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
adugin
@adugin
1) Очевидное решение: заменить [] на <> и отбросить [br]
2) Что значит "исключить взлом через него"? Поставьте задачу конкретнее.

Пример с регуляркой на Python:
>>> import re
>>> text = '[br][img src="images/20150429064557608.jpg" width="1500" class="class_name" alt="pic_title"][br]'
>>> items = re.findall(r'(?:\b(src|width|class|alt)="([^"]*)")+', text)
>>> items
[('src', 'images/20150429064557608.jpg'), ('width', '1500'), ('class', 'class_name'), ('alt', 'pic_title')]
>>> line = '<img %s>' % ' '.join('%s="%s"' % (param, value) for param, value in items)
>>> line
'<img src="images/20150429064557608.jpg" width="1500" class="class_name" alt="pic_title">'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Первые три результата в Гугле по запросу "php bbcode parse"
с объяснением
без объяснения
для комплекта
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
26 дек. 2024, в 14:50
2000 руб./за проект
26 дек. 2024, в 14:40
15000 руб./за проект
26 дек. 2024, в 14:27
100000 руб./за проект