作者:wendy-kiki8 | 来源:互联网 | 2018-02-22 14:06
preg_replace的/e模式在php高版本下如php7中会抛出以下警告:Warning:preg_replace():The/emodifierisnolongersupported,usepreg_replace_callbackinsteadinE:\wwwroot\e.phponline9,意思是说/e修饰符已经不再支持,请使用preg_replace_callback代替。
reg_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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
header("contenttype:text/html;charset=utf8");
/
示例0
by 代潇瑞博客
/
$subject = '系统当前时间:1499702400,一小时后:1499706000';
$str = preg_replace('/(\d+)/e', 'date("Ymd H:i:s", $1)', $subject);
echo $str.PHP_EOL.' ';
//运行结果为:系统当前时间:20170711 00:00:00,一小时后:20170711 01:00:00
/
改为preg_replace_callback的形式
/
$str = preg_replace_callback('/(\d+)/', function($match){
return date("Ymd H:i:s", $match[1]);
}, $subject);
echo $str.PHP_EOL.' ';
|
示例1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
header("contenttype:text/html;charset=utf8");
/
示例1
by 代潇瑞博客
/
$str = preg_replace('/\$\{(.+)\}/e', '$1', $subject);
echo $str.PHP_EOL.' ';
//运行结果为: 4+5=9 ,因为'$1'中匹配出来的是'4+5'当做php表达式执行了。
/
改为preg_replace_callback的形式
/
$str = preg_replace_callback('/\$\{(.+)\}/', function($match){
eval('$a = '.$match[1].';');
return $a;
}, $subject);
echo $str.PHP_EOL.' ';
|
示例2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
header("contenttype:text/html;charset=utf8");
/
示例2
by 代潇瑞博客
保留n位小数
/
$precision = 2;
$subject = '看完《php从入门到精通》需要33.123456小时';
$str = preg_replace('/([\d|\.]+)/e', 'round($1, '.$precision.')', $subject);
echo $str.PHP_EOL.' ';
//运行结果为:看完《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.' ';
//注:这里的关键点是use,function(...) use (...){} 属于闭包语法,读者可以查询相关资料了解更多。
|
通过这3个例子的学习,相信以后遇到任何形式的基本上都没有问题了。