PHP正则表达式在不同版本或不同操作系统上的表现不同

时间:2009-09-04 03:13:11

标签: php regex compatibility

我在两个不同的操作系统上使用两个不同版本的php。

一个是5.2.9在Windows上运行(wamp)。

一个是在CentOS 5(灯泡)上运行的5.2.6。

涉及组名的正则表达式适用于Windows,但不适用于CentOS。

这样的例子是/^field_(?<myname>.+)/

这是操作系统问题吗?或者像PHP一样构建一个?

谢谢,

2 个答案:

答案 0 :(得分:1)

PHP中可用的大多数正则表达式函数都可以追溯到libpcre,该库在几年内有一个动荡的历史记录,以回应一些安全问题,这些问题的修复程序会改变语义。在默认情况下构建PHP时,它使用捆绑的libpcre,当更改时,会在更改日志中注明:http://www.php.net/ChangeLog-5.php。一些发行版或者如果你自己编译可能会导致php使用外部libpcre,它将具有该版本的语义。

没有好的解决方案,除了到目前为止事情往往会向前发展,这意味着如果你的正则表达式适用于最新版本,它往往适用于历史版本,反过来,正如我所指出的那样,不是真的。

答案 1 :(得分:0)

您使用哪种正则表达式函数? PHP有eregpreg,preg正则表达式的行为类似于perls正则表达式,并且在所有操作系统上应该表现相同。