2011-05-16 104 views
0

如何使用preg_replace作为替换参数?此代码出现错误。带替换功能的preg_replace

function getInfo($id,$slot){ 
    if(!$id){ return '<b>Error</b> Id Not Returned. Please contact [email protected] 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 
); 
+0

不是问题:?'' – GolezTrol 2011-05-16 23:52:39

+2

什么错误你好吗? – tkm256 2011-05-17 00:02:43

回答

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 
+0

这张发布于2011年,但你是对的。 – Jake 2014-01-24 01:06:09

+0

@Jake我只是偶然发现了这个,并认为我可能会帮助未来的观众! – m59 2014-01-24 01:07:47

0

我想你忘记了e修改(PRE​​G_REPLACE_EVAL)在preg_replace函数的功能,需要此修饰符来评估替换字符串作为PHP代码。它应该是这样的:

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

的详情请参见this manual