This question already has answers here:
How can I convert ereg expressions to preg in PHP?

(4个答案)


1年前关闭。




我在一个大型PHP应用程序上工作(> 100万行,已有10年的历史了),该应用程序广泛使用eregereg_replace-目前在516个类中有1,768个唯一正则表达式。

我很清楚为什么不推荐使用ereg,但是显然迁移到preg可能会涉及很多。

有谁知道在PHP中对ereg的支持可能会维持多长时间,和/或是否有任何建议以这种规模迁移到preg。我怀疑从ereg到preg的自动翻译是不可能的/不切实际的?

最佳答案

我不确定何时删除ereg,但我的赌注是从PHP 6.0开始。

关于第二个问题(将ereg转换为preg)似乎并不难,如果您的应用程序的行数超过一百万,那么您肯定有足够的资源让某人最多完成一周的工作。我会grep您代码中的所有ereg_实例,并在您喜欢的IDE中设置一些宏(添加分隔符,修饰符等简单的东西)。

我敢打赌,大多数1768个正则表达式都可以使用宏进行移植,而其他的则很好。

另一个选择可能是在ereg函数周围编写包装器(如果不可用),并根据需要实现the changes:

if (function_exists('ereg') !== true)
{
    function ereg($pattern, $string, &$regs)
    {
        return preg_match('~' . addcslashes($pattern, '~') . '~', $string, $regs);
    }
}

if (function_exists('eregi') !== true)
{
    function eregi($pattern, $string, &$regs)
    {
        return preg_match('~' . addcslashes($pattern, '~') . '~i', $string, $regs);
    }
}

你明白了。同样,PEAR package PHP Compat可能也是可行的解决方案。

09-19 03:26