Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не работает PHP-конструкция во втором параметре preg_replace()
 
 автор: neokortex   (02.10.2009 в 01:15)   письмо автору
 
 

Здравствуйте, не работает вот такая конструкци

$template=preg_replace("/(\[\|)(.+?)(\|\])/", $ar["\\2"], $template);

принцип я думаю понятен.
выдается ошибка Notice: Undefined index: \2 in...

  Ответить  
 
 автор: cheops   (02.10.2009 в 01:32)   письмо автору
 
   для: neokortex   (02.10.2009 в 01:15)
 

Эта функция так не работает, вам нужно либо воспользоваться модификатором e, заставляющего выполнять PHP-код во втором параметре, либо функцией preg_replace_callback(), которая использует для замены функцию обратного вызова.

  Ответить  
 
 автор: neokortex   (02.10.2009 в 01:55)   письмо автору
 
   для: cheops   (02.10.2009 в 01:32)
 

спасибо. сейчас попробовал: что-то не получается. а можно примеры?

  Ответить  
 
 автор: cheops   (02.10.2009 в 02:04)   письмо автору
 
   для: neokortex   (02.10.2009 в 01:55)
 

Можно поступить как-то так
<?php
  $pattern 
"/(\[\|)(.+?)(\|\])/";
  
$template=preg_replace_callback($pattern"replace"$template);
  function 
replace($match)
  {
     global 
$ar;
     return 
$ar[$match[2]];
  }
?>

  Ответить  
 
 автор: neokortex   (02.10.2009 в 03:13)   письмо автору
 
   для: cheops   (02.10.2009 в 02:04)
 

спасибо. покумекал. там проблемы с синтаксисом были. решил при помощи модификатора.
кому интересно будет решается так:

$template=preg_replace("/(\[\|)(.+?)(\|\])/e", "\$ar['\\2']", $template);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования