我有这段代码:
echo preg_replace('/\!(.*)\!/', file_get_contents('${1}'), $str);
它的意图是用感叹号之间指定的文件内容替换所有!...!
。但是,它无法正常工作,因为${1}
未被替换:
Warning: file_get_contents(${1}) [function.file-get-contents]: failed to open stream: No such file or directory
如果我编码:
echo preg_replace('/\!(.*)\!/', '${1}', $te);
一切都很好(即!...!
之间的文字被文本本身取代)。
如何更换${1}
中的file_get_contents
?
答案 0 :(得分:1)
echo preg_replace_callback('/\!(.*)\!/', function($matches) {
return file_get_contents($matches[1]);
}, $str);
你去吧。使用preg_replace_callback进行此类替换,您需要在匹配项上调用自定义函数来提供替换字符串。
答案 1 :(得分:0)
你也可以使用e
modifiert,如下所示:
echo preg_replace('/!(.*)!/e', 'file_get_contents("$1");', $str);
但就像eval()
函数一样,在某些情况下,这可能会成为 evil 。