2012-02-20 29 views
0

与动态变量替换我想下面的代码:中的preg_replace

$t = '12<-- AB_C -->'; 
$AB_C = 'abc'; 
echo preg_replace('/\<-- ([A-Z_]+) --\>/', "$$1", $t); 

我想“12abc”,但它输出:12 $ AB_C,因此,它不承认更换新动态变量。 是否有任何方式使用preg_replace()中的匹配词作为变量或动态变量?

编辑:

对于那些谁寻求解决这个问题,“/ E”标志,evalates更换,解决了这个问题,并返回我想要的结果,使用:

preg_replace('/\<-- ([A-Z_]+) --\>/e', "$$1", $t); 

回答

1

您能使用preg_replace_callback吗?

这就像preg_replace,但具有一个回调函数,它的阵列$matches其中$matches[0]是整个比赛,$matches[1]是第一捕获基等

也许类似(对不起,未测试):

preg_replace_callback(
     '/\<-- ([A-Z_]+) --\>/', 
     create_function(
      '$matches', 
      'return $$matches[1];' // attempt to retrieve value of $AB_C 
     ), 
     $t 
    );