带替换功能的preg_replace

时间:2011-05-16 23:48:25

标签: php preg-replace

如何将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
);

2 个答案:

答案 0 :(得分:2)

e修饰符现在deprecated支持 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 :(得分:0)

我认为您在preg_replace函数中忘记了e修饰符(PREG_REPLACE_EVAL),需要此修饰符来将替换字符串计算为PHP代码。它应该是这样的:

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

有关详细信息,请参阅this manual