preg_replace с функцией замены

#php #preg-replace

#php #preg-заменить

Вопрос:

Как вы используете preg_replace с функцией в качестве параметра замены? Я получаю ошибку с этим кодом.

 function getInfo($id,$slot){
  if(!$id){ return '<b>Error</b> Id Not Returned. Please contact support@site.com for more information.'; }
  $mm = mysql_query("SELECT * FROM `users` WHERE `id`='".$id."'");
  $mma = mysql_fetch_assoc($mm);
  $p = $mma[$slot];
  return $p;
  //return $id; <- Debug (Returns ID given)
}
$post = preg_replace(
  "/[CallName]([^]] )[/CallName]/", 
  getInfo('\1',"fullname"), 
  $post
);
  

Ответ №1:

e Модификатор теперь устарел в пользу preg_replace_callback.

Пример использования:

 $x = 'abcd-efg-hijk-lmnop';

$x = preg_replace_callback(
  '/-(.)/', //pattern
  function($matches) { //callback
    return strtoupper($matches[1]);
  }, 
  $x //subject
);

echo $x; //abcdEfgHijkLmnop
  

Комментарии:

1. @Jake Я просто случайно наткнулся на это и подумал, что мог бы помочь будущим зрителям!

Ответ №2:

Я думаю, вы забыли e модификатор (PREG_REPLACE_EVAL) в функции preg_replace, этот модификатор необходим для оценки строки замены как PHP-кода. Это должно быть так:

 $post = preg_replace('~[CallName]([^]] )[/CallName]~e', 'getInfo("$1", "fullname")', $post);
  

Смотрите это руководство для получения подробной информации.