php废弃函数ereg_replace(),如何用preg_replace()替换?
发布于 作者:苏南大叔 来源:程序如此灵动~
书接前文,苏南大叔在本篇文章中,继续描述php的废弃函数ereg_replace(),它的替代函数是:preg_replace()。本文中的整体思路和ereg()函数的替代方案差不多。所以,大家可以对照着看看。相关链接请参见文末。

本文测试环境:mac、php@5.6。ereg_replace()的替代方案是:preg_replace()。本文具体描述替代这个方案的细节之处。
基本描述
ereg_replace()是个使用正则的replace过程,和普通的str_replace()不一样的地方是:要保留正则匹配到的文字,而不是在正则中,显示输出的文字。
ereg_replace ( string $pattern , string $replacement , string $string ) : stringpreg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixedpreg_replace()是目前的推荐方案,必选参数3个,可选参数3个。基本上可以覆盖ereg_replace()的三个必选参数。只不过是参数的具体用法不同。返回值是基本上一致的。

在php5.6中,ereg_replace()和preg-replace()同时存在,只不过ereg_replace()是个warning。在php@7系列中,ereg_replace()是undefined function,而preg-replace()依然正常使用。
正则表达式$pattern
第一个参数$pattern是需要特殊处理,才能正常从ereg_replace()迁移到preg-replace()。
- 主要是需要添加定界符
/,注意转义特殊字符/到\/. - 如果不想做
/转义的话,就需要更换定界符/为#或者@或者|。
$s = "https://newsn.net/";
$pattern = "(.*)://(.*).net/";
$pattern2= "(.*):\/\/(.*).net\/";
$replacement = "\\1s://\\2.com.cn";
$result = ereg_replace($pattern, $replacement, $s);
$result2 = preg_replace("/".$pattern2."/", $?, $s);
$result3 = preg_replace("#".$pattern."#", $replacement, $s);
$result4 = preg_replace("@".$pattern."@", $replacement, $s);
$result5 = preg_replace("|".$pattern."|", $replacement, $s);
替换规则$replacement
在这里替换规则,出现了两种表达方式:
- 第一种表述方式是:
//1和//2,这个通用。ereg_replace()和preg_replace()都是可以识别的。 - 另外一种表达方式是:
$1和$2,这个并不通用。只有preg_replace()可以识别。
$s = "https://newsn.net/";
$pattern = "(.*)://(.*).net/";
$replacement = "\\1s://\\2.com.cn";
$replacement2 = "$1s://$2.com.cn";
$result = ereg_replace($pattern, $replacement, $s);
$pattern2= "(.*):\/\/(.*).net\/";
$result2 = preg_replace("/".$pattern2."/", $replacement2, $s);
$result3 = preg_replace("#".$pattern."#", $replacement2, $s);
$result4 = preg_replace("@".$pattern."@", $replacement2, $s);
$result5 = preg_replace("|".$pattern."|", $replacement2, $s);
相关链接
- https://newsn.net/say/php-deprecated-ereg.html
- https://www.php.net/manual/zh/function.ereg-replace.php
- https://www.php.net/manual/zh/function.preg-replace.php
总结
为啥苏南大叔会和这个废弃的php函数过不去呢?因为有几个老的代码要做兼容处理。真心是无奈啊。更多php的文章呢,在下面的这个链接里面,都是苏南大叔亲手写出来的。