php:ereg_replace函数的替代方案preg_replace
发布于 作者:苏南大叔 来源:程序如此灵动~
苏南大叔的wordpress,想安装一款yusi1.0主题。但是这款yusi1.0主题,似乎自从面世就没有更新过...而且官网下载到的版本,被数字公司家的产品报毒。只好付费进群下载到一个不报毒的yusi1.0版本。

ereg_replace函数已经被放弃,替代方案是preg_replace。那么,具体上来说,如何进行更新换代呢?测试环境:mac,php72。
php72下的报错信息
然而,这款yusi1.0主题与最新的php7.27是不兼容的。报错信息是:
Uncaught Error: Call to undefined function ereg_replace()
ereg-replace函数说明
在php文档中,苏南大叔看到的说明是:这个ereg_replace()函数已经被废弃了。官方建议使用preg_replace()进行替代,而两者的区别上几乎是不大的。仅在于第一个参数的正则表达式写法不一致。
preg_replace() 函数使用了 Perl 兼容正则表达式语法,通常是比 ereg_replace() 更快的替代方案。
正则上的区别
正则表达式上,其实总是不那么容易理清的。那么还是以这款yusi1.0主题来说明一下吧。原函数是这样的:
ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'mbt-mainmenu', 'echo' => false)));正则部分是:<div[^>]*><ul[^>]*>,看上去就不是个正常的正则。
所以,苏南大叔修改一下/wp-content/themes/yusi1.0/header.php文件里面的代码。
变成了下面这样:
{<div[^>]*><ul[^>]*>}":
preg_replace("{<div[^>]*><ul[^>]*>}", "", wp_nav_menu(array('theme_location' => 'mbt-mainmenu', 'echo' => false)) );或者这样,/^<div[^>]*><ul[^>]*>$/:
preg_replace("/^<div[^>]*><ul[^>]*>$/", "", wp_nav_menu(array('theme_location' => 'mbt-mainmenu', 'echo' => false)) );或者这样,/<div[^>]*><ul[^>]*>/:
preg_replace("/<div[^>]*><ul[^>]*>/", "", wp_nav_menu(array('theme_location' => 'mbt-mainmenu', 'echo' => false)) );
结论
preg_replace替代ereg_replace,其实是有条件的:需要修改正则的表达式内容(写法)。改完写法后,就可以正常使用了。
历史的潮流不可阻挡,那么你搞清楚了自己在哪个流里面了么?更多php相关的经验文章,请点击苏南大叔的更多经验文章。https://newsn.net/tag/php/ 。