Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запуск функции при работе preg_replace

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Schupp
Отправлено: 06 Октября, 2011 - 23:21:41
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Есть такая регулярка (кстати, созданная Мастерами с этого форума, за что им отдельная благодарность).

CODE (text):
скопировать код в буфер обмена
  1. $t=preg_replace('#\<img.*alt="(.*)".*class="lb".*src="(.*)\.(jpg|gif|png)\".*>#mi','<a title="\1" rel="lytebox" href="\2-g.\3"><img alt="\1" class="dborder" src="\2-k.\3" /></a>',$t);
  2. echo $t;


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


Но очень хочется все объединить и не парсить все дважды, а именно при проходе с заменой сразу запускать функцию. Возможно ли это? Подскажите пожалуйста. Знаю, что это все можно с preg_replace_callback сделать, но мозгов не хватает сформулировать саму функцию...

(Отредактировано автором: 07 Октября, 2011 - 00:27:14)

 
 Top
Draftpad
Отправлено: 11 Октября, 2011 - 10:01:09
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Не уверен, что правильно вас понял, но всё же попробую ответить.
Если ваш парсер работает по типу вызываемой функции, то можно просто передать перехваченные параметры.
Вот пример из одного моего сайта:

PHP:
скопировать код в буфер обмена
  1.  
  2. define('BuildBlockAOpen', '<!-- BuildBBCodeMODStart -->');
  3. define('BuildBlockAClose', '<!-- BuildBBCodeMODEnd -->');
  4.  
  5. $text = preg_replace('#'.BuildBlockAOpen.'(.*?)'.BuildBlockAClose.'#ie', build_block_gen('\$1'), $text);


То есть берём переменную $text, из неё по шаблону '#'.BuildBlockAOpen.'(.*?)'.BuildBlockAClose.'#ie', вытаскиваем значение, передаём его в функцию build_block_gen() и результат записываем опять в переменную $text.

Если сделать, чтобы ваш парсер вызывался функцией, то по аналогии с моим кодом, можете передать в функцию все свои значения и работать с ними.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB