我有一段代码:
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);
一切都很好(即!...!
之间的文本被文本本身替换(。
如何使file_get_contents
中的${1}
也被替换?
echo preg_replace_callback('/!(.*)!/', function($matches) {
return file_get_contents($matches[1]);
}, $str);
给你。对这种替换使用preg_replace_callback,在这种替换中,您需要对匹配项调用一个自定义函数来提供替换字符串。
您也可以使用e
修饰符,如下所示:
echo preg_replace('/!(.*)!/e', 'file_get_contents("$1");', $str);
但就像eval()
函数一样,在某些情况下,这可能会变成邪恶。