我正在尝试以下代码:
$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);
答案 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
);