为什么PHP中preg_replace执行后原字符串未发生修改?
问题原因
preg_replace 不会修改你传入的原$string变量,所有替换后的结果只会通过返回值输出,你第二段代码没有接收这个返回值,自然看不到修改效果。
两段代码的差异说明
- 第一段代码直接把
preg_replace的返回值传给var_dump输出,所以能拿到符合预期的替换结果。 - 第二段代码仅执行了替换操作,但没有把返回的替换后字符串赋值给任何变量,你定义的原
$string变量自始至终都没有被修改,所以var_dump输出的还是初始的未改动内容。
修正后的代码示例
<?php $pattern = '/\[.*?\]/'; $string = 'INSERTED, Placement, 123, [status, companyUrl, hoursPerDay], 1984-05-15 05:00:35.167'; // 接收返回值覆盖原变量即可 $string = preg_replace($pattern, 'null', $string); var_dump($string);
你对返回值规则的理解完全正确,只是没注意到preg_replace没有设计引用参数来修改原输入字符串,PHP字符串默认是传值传递,原变量不会被函数内部操作修改。
内容的提问来源于stack exchange,提问作者yendrrek
相关产品推荐
相关产品推荐

