本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。

书接前文,苏南大叔在本篇文章中,继续描述php的废弃函数ereg_replace(),它的替代函数是:preg_replace()。本文中的整体思路和ereg()函数的替代方案差不多。所以,大家可以对照着看看。相关链接请参见文末。

苏南大叔:php废弃函数ereg_replace(),如何用preg_replace()替换? - php-deprecated-ereg_replace
php废弃函数ereg_replace(),如何用preg_replace()替换?(图4-1)

本文测试环境:macphp@5.6ereg_replace()的替代方案是:preg_replace()。本文具体描述替代这个方案的细节之处。

基本描述

ereg_replace()是个使用正则的replace过程,和普通的str_replace()不一样的地方是:要保留正则匹配到的文字,而不是在正则中,显示输出的文字。

ereg_replace ( string $pattern , string $replacement , string $string ) : string
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed

preg_replace()是目前的推荐方案,必选参数3个,可选参数3个。基本上可以覆盖ereg_replace()的三个必选参数。只不过是参数的具体用法不同。返回值是基本上一致的。

苏南大叔:php废弃函数ereg_replace(),如何用preg_replace()替换? - undefined_function
php废弃函数ereg_replace(),如何用preg_replace()替换?(图4-2)

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);

苏南大叔:php废弃函数ereg_replace(),如何用preg_replace()替换? - ereg_replace_pattern
php废弃函数ereg_replace(),如何用preg_replace()替换?(图4-3)

替换规则$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);

苏南大叔:php废弃函数ereg_replace(),如何用preg_replace()替换? - ereg_replace_replacement
php废弃函数ereg_replace(),如何用preg_replace()替换?(图4-4)

相关链接

总结

为啥苏南大叔会和这个废弃的php函数过不去呢?因为有几个老的代码要做兼容处理。真心是无奈啊。更多php的文章呢,在下面的这个链接里面,都是苏南大叔亲手写出来的。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。