PHP 5.5 preg_replace_callback回调问题

functiongetFile($filename){if($filename{0}=='/'&&substr($this->fileRoot,-1)=='/'){$fi... function getFile($filename)
{
if ($filename{0} == '/' && substr($this->fileRoot, -1) == '/') {
$filename = substr($filename, 1);
}
$filename = $this->fileRoot . $filename;
if (!($fh = @fopen($filename, 'r'))) {
$this->err[] = PEAR::raiseError(
$this->errorMessage(IT_TPL_NOT_FOUND) . ': "' .$filename .'"',
IT_TPL_NOT_FOUND
);
return "";
}
$fsize = filesize($filename);
if ($fsize < 1) {
fclose($fh);
return '';
}
$content = fread($fh, $fsize);
fclose($fh);
return preg_replace(
"#<!-- INCLUDE (.*) -->#ime",
"\$this->getFile('\\1')",
$content
);
} // end func getFile

怎样将preg_replace 改成preg_replace_callback?
展开
 我来答
CloudMonarch
2014-07-07 · TA获得超过233个赞
知道答主
回答量:127
采纳率:0%
帮助的人:158万
展开全部
preg_replace_callback是在有字符以外的替换时使用的,比如有数值比较。

你给的代码preg_replace只是纯字符替换,没必要用preg_replace_callback....
改不是画蛇添足..
更多追问追答
追问
preg_replace 在PHP 5.5 中已经丢弃了,不能使用了!只有用preg_replace_callback进行替代,这是画蛇添足?
追答

没有注意到你前贴的表达式内嵌递归执行。因为这写法确实野蛮。

PHP5.5并未废弃preg_replace函数,废弃的只是该函数的表达式中的“e”调节符--不再允许表达式中执行代码。preg_replace仍然非常有效和高效。


改成callback只要把最后一句替换成

return preg_replace_callback(
"#<!-- INCLUDE (.*) -->#im", function ($m){
return $this->getFile($m[1]);
}, $content
);

php 5.4下测试可行,未知5.5版,因为5.5的匿名函数有小改,而5.3以下要另写

this is from shtml.html
this is from shtml1.html
this is from shtml1_1.html
this is from shtml1_1_1.html
this is from shtml1_2.html
this is from shtml2.html
this is from shtml2_1.html
佳达源
2024-10-28 广告
AR0144CSSM20SUKA0-CPBR这款产品,作为我司产品线中的重要一员,集成了高精度的传感器技术与先进的图像处理算法,广泛应用于安防监控、工业自动化及机器视觉等领域。其卓越的性能与稳定性,确保了在各种复杂环境下的精准数据采集与高效... 点击进入详情页
本回答由佳达源提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式