preg_replace 的/e问题

WBOY
Release: 2016-06-20 12:44:36
Original
1083 people have browsed it

由于新版PHP不能用/e,下面这句要怎么改才正常

preg_replace("/(?正常执行结果是:类别0::::::品名1::::::品牌厂商2::::::规格3::::::1::::::单位5::::::9::::::0
去掉/e,结果变成了:类别0::::::品名1::::::品牌厂商2::::::规格3::::::1::::::单位5::::::10-1::::::0

目的是让内容的原数量减新内容的数量,所以这10和1不是固定的.


回复讨论(解决方案)

e 模式是 eval
就是将第二个参数当做 php 语句执行

一个是算式的结果,一个是算式
你不执行,当然结果就不对了

e 模式是 eval
就是将第二个参数当做 php 语句执行

一个是算式的结果,一个是算式
你不执行,当然结果就不对了



那要怎么改?

$0 不懂是怎么获取的

用 preg_replace_callback
这样第二个参数就是回调函数,你把算式写在函数里就可以了

用 preg_replace_callback
这样第二个参数就是回调函数,你把算式写在函数里就可以了



preg_replace_callback("/(?这样写了,可是$0获取不到,执行什么也没输出了

preg_replace_callback("/(?
这样也不行,

$morefrf[6] 是什么?

问问题的时候要把问题描述清楚,不然人家怎么帮你

$morefrf[6] 是什么?

问问题的时候要把问题描述清楚,不然人家怎么帮你



是数字

如:
$morefrf[6]=1;
preg_replace("/(?

对于

$morefrf[6]=1;preg_replace("/(?<=$so)\d+/eis", '$0 - '.$morefrf[6], $rs,1);
Copy after login
Copy after login

要改写为
$morefrf[6]=1;preg_replace_callback("/(?<=$so)\d+/is", function($m) use($morefrf) { return $m[0] - $morefrf[6]; }, $rs,1);
Copy after login
Copy after login

对于

$morefrf[6]=1;preg_replace("/(?<=$so)\d+/eis", '$0 - '.$morefrf[6], $rs,1);
Copy after login
Copy after login

要改写为
$morefrf[6]=1;preg_replace_callback("/(?<=$so)\d+/is", function($m) use($morefrf) { return $m[0] - $morefrf[6]; }, $rs,1);
Copy after login
Copy after login



可以修改了,谢谢,但还有个错误

正常执行结果是:类别0::::::品名1::::::品牌厂商2::::::规格3::::::1::::::单位5::::::9::::::10
现在变成了:类别0::::::品名1::::::品牌厂商2::::::规格3::::::1::::::单位5::::::9::::::9

也就是,它把后面的10也处理了,怎么解决?

你鸡没有给出原始串,也没有给出期望的结果
谁知到你要做什么呢?

我只能根据你给出的来做

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template