gpt4 book ai didi

php - preg_match_all 在不同服务器上表现怪异

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:24 28 4
gpt4 key购买 nike

我尝试先阅读其他问题,但没有发现任何有用的东西。

我在自己的 PC 上有一个装有 PHP 5.3.28 和 PHP 5.4.7 的开发服务器。

$string = '<if test="sub_function(parameter_1, parameter_2)">Match this</if>';
preg_match_all("/<if test=['\"]([!\w|&(),-\s]+)['\"]>(.*?)<\/if>/s", $string, $matches, PREG_SET_ORDER);

上面的代码在我的 xampp 环境中运行良好,但在 x86_64-redhat-linux-gnu 服务器上不起作用。 $matches 在 linux 环境中是错误的,在我的 xampp 中看起来像这样:

Array
(
[0] => Array
(
[0] => Match this
[1] => sub_function(parameter_1, parameter_2)
[2] => Match this
)
)

是什么导致了这种行为?这也适用于我的其他 PC,例如 PHP 5.2 - 5.3。

编辑:正则表达式故意复杂化,它比我向您展示的用途更多。我想知道的是影响服务器上 preg_match 行为的事情。

最佳答案

我觉得问题出在这里

[!\w|&(),-\s]

这不是一个有效的范围。一些 PCRE 版本更宽松并允许类似的东西,但是(至少,在 OSX 上),php 5.5 和 5.6 拒绝运行这个说

Warning: preg_match_all(): Compilation failed: invalid range in character class at offset 25...

您可以通过转义 - 或将其移动到末尾来轻松解决此问题:

[!\w|&(),\-\s]

此外,将 error_reporting 设置为 E_ALL 总是有帮助的。

关于php - preg_match_all 在不同服务器上表现怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25378989/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com