preg_replace regex未按预期工作


preg_replace regex not working as expected

所以我正在尝试执行以下操作,但它不起作用。不确定原因:

$block = preg_replace('#'{([A-Z0-9'-_]+)'}#', "<?php " . $this->compile_var(''1) . " ?>", $block);

我使用它的目的是打开这个输入:

<link href="{VAR_TEMPLATE_PATH}css/common.css" rel="stylesheet" type="text/css">

进入:

 <link href="<?php $this->page_vars["TEMPLATE_PATH"] ?>css/common.css" rel="stylesheet" type="text/css">

实际的转换很好,这些都包含在compile_var中,但preg_replace不再将''''1变成"var_TEMPLATE_PATH",这是在字符串中使用的。

相反,它传递"''1"作为compile_var的参数?

为什么会突然发生这种事?我该怎么修?

干杯!

这样使用它:

$block = '<link href="{VAR_TEMPLATE_PATH}css/common.css" rel="stylesheet" type="text/css">';
$block=preg_replace('#'{(?:VAR_)?(['w-]+)'}#', '<?php $this->compile_var("'1") ?>', $block);
echo $block;

输出:

<link href="<?php $this->compile_var("TEMPLATE_PATH") ?>css/common.css" rel="stylesheet" type="text/css">

如果您希望VAR_也在最终输出中,则使用:

$block = preg_replace('#'{(['w-]+)'}#', '<?php $this->compile_var("'1") ?>', $block);

请尝试在compile_var中使用'1

<?php " . $this->compile_var('1) . " ?>

下面是一个工作示例:http://regex101.com/r/rM0jD1