【发布时间】:2011-02-11 15:18:29
【问题描述】:
我的以下正则表达式在我的测试服务器上运行良好,但在我的托管服务器上只返回一个空字符串。
$text = preg_replace('~[^\\pL\d]+~u', $use, $text);
现在我很确定这归结为 PCRE 的托管服务器版本未在启用 Unicode 属性支持的情况下进行编译。两个版本的区别如下:
我的服务器:
PCRE version 7.8 2008-09-05
Compiled with
UTF-8 support
Unicode properties support
Newline sequence is LF
\R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack
托管服务器:
PCRE version 4.5 01-December-2003
Compiled with
UTF-8 support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Match recursion uses stack
另请注意,托管服务器上的版本(与 PHP 编译的版本相同)相当旧。
但让我感到困惑的是,pcretest 在命令行中的两台服务器上都失败了
re> ~[^\\pL\d]+~u
** Unknown option 'u'
虽然这个正则表达式在我的服务器上从 PHP 运行时可以正常工作。
所以,我想我的问题是由于缺少 Unicode 属性,托管服务器上的正则表达式是否会失败?还是我还缺少其他东西?
谢谢大家, 天然气。
【问题讨论】: