我注意到在PHP的正则表达式库中,有两种选择:ereg和preg。它们之间有什么区别?其中一个更快吗?如果是这样,为什么没有弃用较慢的那一个?
在哪些情况下使用其中一种比使用另一种更好?
访问php.net/ereg会显示如下内容:
警告
自PHP 5.3.0起,此函数已被弃用,并在PHP 6.0.0中移除。建议不要依赖此功能。
向下滚动页面,我们会看到以下内容:
注意: 使用Perl兼容的正则表达式语法的preg_match()通常是 ereg() 的更快的替代品。
请注意我的强调。
preg是Perl兼容正则表达式库
ereg是POSIX兼容的正则表达式库
它们有稍微不同的语法,preg在某些情况下略微更快。ereg已被弃用(并且在php6中被删除),因此不建议使用。
关于哪个更快更好,有很多讨论。
如果您计划将来升级到PHP6,那么您的决定已经做出。否则:
一般共识是PCRE是更好的解决方案,但如果您有一个具有大量流量的特定页面,并且您不需要PHP6,那么进行一些测试可能是值得的。 例如,来自PHP手册评论:
在PHP中废弃POSIX正则表达式以进行Perl搜索,就像用预制房间和墙壁替换带有木板和砖块的房屋一样。当然,您可能能够混合和匹配其中的某些部分,但在所有零件都摆在您面前时,修改起来要容易得多。嗯,ereg及其衍生函数(例如ereg_match等)在php5中已被弃用,并将在php6中移除,因此最好使用preg系列函数。
preg用于Perl样式的正则表达式,而ereg是标准的POSIX正则表达式。
mb_ereg_match()
和其他多字节ereg函数并未被弃用。 - Benjamin Atkin