如何将preg_replace中的匹配作为可用变量进行访问?这是我的示例代码:
<?php
$body = <<<EOT
Thank you for registering at <!-- site_name -->
Your username is: <!-- user_name -->
<!-- signature -->
EOT;
$value['site_name'] = "www.thiswebsite.com";
$value['user_name'] = "user_123";
$value['signature'] = <<<EOT
live long and prosper
EOT;
//echo preg_replace("/<!-- (#?\w+) -->/i", "[$1]", $body);
echo preg_replace("/<!-- (#?\w+) -->/i", $value[$1], $body);
?>
我不断收到以下错误消息:
解析错误:语法错误,意外 '$',期待T_STRING或T_VARIABLE 第18行
当匹配变量用引号括起来时,带有“[$ i]”的上述注释行正常工作。我缺少一些语法吗?
答案 0 :(得分:3)
像这样:echo preg_replace("/<!-- (#?\w+) -->/", '$1', $body);
/i
修饰符只会对其中没有套接字母的图案造成伤害。
答案 1 :(得分:0)
您不能以这种方式使用preg_replace
。它没有定义一个名为$1
的变量,您可以在没有替换之外进行交互;字符串'$1'
仅在内部用于表示模式的第一个子表达式。
您必须使用preg_match
查找与(#?\w+)
匹配的字符串,然后使用preg_replace
将匹配的字符串替换为相应的$value
:
$value['site_name'] = "www.thiswebsite.com";
$value['user_name'] = "user_123";
$value['signature'] = "something else";
$matches = array();
$pattern = "/<!-- (#?\w+) -->/i";
if (preg_match($pattern, $body, $matches)) {
if (array_key_exists($matches[1], $value)) {
$body = preg_replace($pattern, '<!-- ' . $value[$matches[1]] . ' -->', $body);
}
}
echo $body;