Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск вложенных совпадений, Рекурисивный поиск по регулярке 
:(
    Опции темы
prototype
Дата 5.8.2010, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



Добрый вечер

Можно ли в php жадной регуляркой рекурсивно выполнять поиск и замену совпадений? Например, как такой bb-код...
Код

[quote]
    цитата
    [quote]
        вложенная цитата
    [/quote]
[/quote]

...превратить в:
Код

<blockquote>
    цитата
    <blockquote>
        вложенная цитата
    </blockquote>
</blockquote>


Использую такую регулярку:
Код

preg_replace('/\[quote](.*)\[\/quote\]/ms', '<blockquote>\1</blockquote>', $text);

Но вложенный тег не конвертируется. Хелп?
PM MAIL   Вверх
CruorVult
Дата 5.8.2010, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

Репутация: нет
Всего: 28



можно просто:
Код

str_replace('[quote]','<blockquote>',str_replace('[/quote]','</blockquote>',$text))

PM MAIL Skype   Вверх
prototype
Дата 6.8.2010, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 19.7.2010

Репутация: нет
Всего: нет



Простая замена не совсем подходит, т.к. у bb-кодов могут быть атрибуты ([quote=username]) и, к тому же, хотелось бы вылавливать все незакрытые теги - из-за незакрытого div'а может поплыть весь шаблон. Можно прогонять регулярку циклом до тех пор, пока не количество замен не станет равным нулю, но тут я сталкиваюсь с еще одной проблемой: жадный вариант тоже не катит в случае с последовательными (невложенными) тегами - найдет не свою пару. Получается нужна вроде как нежадная регулярка с поддержкой рекурсии. Есть идеи?
PM MAIL   Вверх
skyboy
Дата 6.8.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 8
Всего: 260



preg_replace_callback
+
регулярка \[/?[^\]+]\]
+
стек внутри callback функции

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.