preg_match在PHP中的实时服务器上不起作用


preg_match is not working on live server, in PHP

我试图只从连字符的右侧取出数字-

$data['last_emp_code'] = 'E-001213231';
$matches = null;
$returnValue = preg_match('/-(?<number>'d+)/', $data['last_emp_code'], $matches);
print_r($matches['number']);

这输出:

001213231

上面的代码在本地服务器中工作正常,当我测试时,它也在 PHP 代码板网站上工作。

http://codepad.viper-7.com/fhU4pB

我有 godaddy 主机,我不知道为什么这个简单的代码在服务器上不起作用。

当我尝试在服务器上print_r($matches)时,我得到了空数组。


更新

问题出在服务器上,最后一个员工 ID 在代码中没有"E-"。这就是我收到错误的原因。本地数据库和联机数据库是不同的。

您的主机有什么 PHP 版本?命名模式(?<number>)是在PHP 5.2.2中引入的 - 也许它还没有出现?(与phpversion()核实)

为什么要使用 preg_match...? 做爆炸

$parts = explode( "-" , $str );
    echo $parts[1];

孕育功能就像电锯。仅当您需要使用它们时才使用它们。如果你可以用普通的C字符串函数完成相同的工作,那就走这条路。恕我直言。

在95%的人中,"在测试系统上工作但在live系统上失败"的情况下,它归结为不同的php版本或设置。

执行phpinfo()并检查故障部件的版本和设置是否存在差异。一些主机会阻止完整的 php 函数(如 ini_set)或禁用curl等扩展。