现在的位置: 首页 -> PHP学习 -> 用preg_replace_callback代替preg_replace中/e模式的方法

用preg_replace_callback代替preg_replace中/e模式的方法

2017-07-12 00:55评论数 0 ⁄ 被浏览 624 views+

preg_replace的/e模式在php高版本下如php7中会抛出以下警告:Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in E:\wwwroot\e.php on line 9,意思是说/e修饰符已经不再支持,请使用preg_replace_callback代替。


现在我们通过以下3个不同场景的示例来学习preg_replace_callback代替preg_replace:


示例0:

<?php
header("content-type:text/html;charset=utf-8");

/**
 * 示例0
 * by 代潇瑞博客 
 */
$subject = '系统当前时间:1499702400,一小时后:1499706000';
$str = preg_replace('/(\d+)/e', 'date("Y-m-d H:i:s", $1)', $subject);
echo $str.PHP_EOL.'<br/>';
//运行结果为:系统当前时间:2017-07-11 00:00:00,一小时后:2017-07-11 01:00:00 

/*
 * 改为preg_replace_callback的形式
 */
$str = preg_replace_callback('/(\d+)/', function($match){
	return date("Y-m-d H:i:s", $match[1]);
}, $subject);
echo $str.PHP_EOL.'<br/>';


示例1:

<?php
header("content-type:text/html;charset=utf-8");
/*
 * 示例1
 * by 代潇瑞博客 
 */
$subject = '<p>4+5=${4+5}</p>';
$str = preg_replace('/\$\{(.+)\}/e', '$1', $subject);
echo $str.PHP_EOL.'<br/>';
//运行结果为:<p>4+5=9</p>,因为'$1'中匹配出来的是'4+5'当做php表达式执行了。

/*
 * 改为preg_replace_callback的形式
 */
$str = preg_replace_callback('/\$\{(.+)\}/', function($match){
	eval('$a = '.$match[1].';');
	return $a;
}, $subject);
echo $str.PHP_EOL.'<br/>';


示例2:

<?php
header("content-type:text/html;charset=utf-8");
/*
 * 示例2
 * by 代潇瑞博客 
 * 保留n位小数
 */
$precision = 2;
$subject = '看完《php从入门到精通》需要33.123456小时';
$str = preg_replace('/([\d|\.]+)/e', 'round($1, '.$precision.')', $subject);
echo $str.PHP_EOL.'<br/>';
//运行结果为:看完《php从入门到精通》需要33.12小时。即:33.123456被替换为round(33.123456, $precision)。

/*
 * 改为preg_replace_callback的形式
 */
$str = preg_replace_callback('/([\d|\.]+)/', function($match) use($precision){
	return round($match[1], $precision);
}, $subject);
echo $str.PHP_EOL.'<br/>';
//注:这里的关键点是use,function(...) use (...){} 属于闭包语法,读者可以查询相关资料了解更多。


通过这3个例子的学习,相信以后遇到任何形式的基本上都没有问题了。

 

文章出自:http://www.daixiaorui.com/read/253.html 本站所有文章,除注明出处外皆为原创,转载请注明本文地址,版权所有。

分享到:

目前有 0 条评论  @我要评论

    您的每一个评论都是对我的一份支持

     博客二维码

    昵称 *

    邮箱 *