preg_replace正则表达式没有按预期工作

时间:2013-12-03 05:59:46

标签: php regex

所以我试图做以下事情并且它不起作用。不确定原因:

$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的参数?

为什么会突然发生这种情况?我该如何解决?

干杯!

2 个答案:

答案 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