PHP 7 彻底移除了 ereg 系列函数,必须替换为 preg_match 等 PCRE 函数;需添加分隔符、调整修饰符、修正转义,并注意返回值与捕获逻辑差异。
PHP 7 中 ereg 确实被彻底移除了,不能只是“替换函数名”
ereg 及其家族(eregi、ereg_replace、eregi_replace)在 PHP 5.3.0 被标记为废弃,PHP 7.0 正式删除。直接运行含 ereg 的代码会报致命错误:Fatal error: Uncaught Error: Call to undefined function ereg()。这不是警告,是中断执行——必须改。
用 preg_match 替换 ereg 的核心差异点
二者语法不兼容,不能简单把 ereg($pattern, $string) 改成 preg_match($pattern, $string)。关键区别有:
-
preg_match要求正则模式以分隔符开头和结尾(常用/),而ereg不需要。例如:ereg('^a.*b$', $s)→preg_match('/^a.*b$/', $s) -
ereg默认大小写敏感,eregi是不敏感;preg_match统一靠修饰符控制,不敏感要加i:如/pattern/i -
ereg返回匹配次数(0 或 1),preg_match返回 1(匹配)、0(不匹配)、false(正则语法错)。别用返回值做布尔判断时漏判 false - 转义规则不同:
ereg对反斜杠处理更宽松;preg遵循 PCRE 标准,字符串中反斜杠需双写(\\d而非\d),尤其在双引号字符串里
常见迁移场景与实操写法
以下对比真实旧代码片段和推荐新写法(注意分隔符、修饰符、转义):
旧:if (ereg('^[0-9]+$', $input)) { ... }
新:if (preg_match('/^[0-9]+$/D', $input) === 1) { ... }(D 修饰符避免 $ 匹配末尾换行,行为更接近 ereg)
立即学习“PHP免费学习笔记(深入)”;
旧:eregi('hello', $text)
新:preg_match('/hello/i', $text)