书接前文,苏南大叔在本篇文章中,继续描述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的文章呢,在下面的这个链接里面,都是苏南大叔亲手写出来的。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   php

本站的忠实读者小伙伴,正在阅读下面这些文章: