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
Форумы портала PHP.SU :: Версия для печати :: Запуск функции при работе preg_replace
Форумы портала PHP.SU » » HTTP и PHP » Запуск функции при работе preg_replace

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

1. Schupp - 06 Октября, 2011 - 23:21:41 - перейти к сообщению
Есть такая регулярка (кстати, созданная Мастерами с этого форума, за что им отдельная благодарность).

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 сделать, но мозгов не хватает сформулировать саму функцию...
2. Draftpad - 11 Октября, 2011 - 10:01:09 - перейти к сообщению
Не уверен, что правильно вас понял, но всё же попробую ответить.
Если ваш парсер работает по типу вызываемой функции, то можно просто передать перехваченные параметры.
Вот пример из одного моего сайта:

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.

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

 

Powered by ExBB FM 1.0 RC1