所以我试图做以下事情并且它不起作用。不确定原因:
$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的参数?
为什么会突然发生这种情况?我该如何解决?
干杯!
答案 0 :(得分:1)
像这样使用:
$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);
答案 1 :(得分:0)
尝试在compile_var中使用\1
。
<?php " . $this->compile_var(\1) . " ?>
以下是一个有效的例子:http://regex101.com/r/rM0jD1