替换preg_replace中的Dynamic变量

时间:2012-02-20 05:53:02

标签: variables dynamic preg-replace

我正在尝试以下代码:

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

我想获得“12abc”,但它输出:12 $ AB_C,因此,它不能将替换识别为动态变量。 是否可以使用preg_replace()中匹配的单词作为变量或动态变量?

编辑:

对于那些寻找这个问题的解决方案的人来说,'/ e'标志可以解决问题,并使用以下方法返回我想要的结果:

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

1 个答案:

答案 0 :(得分:1)

您可以使用preg_replace_callback吗?

就像preg_replace,但是回调函数采用数组$matches,其中$matches[0]是整个匹配,$matches[1]是第一个捕获组,等等。 / p>

也许是(抱歉,没有经过测试):

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