gpt4 book ai didi

php - 编译失败 : POSIX collating elements are not supported

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:47 24 4
gpt4 key购买 nike

我刚刚在我们的服务器上安装了一个网站和旧版 CMS,但出现了 POSIX 编译错误。幸运的是,它只出现在后端,但客户很想摆脱它。

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: 
POSIX collating elements are not supported at offset 32 in
/home/kwecars/public_html/webEdition/we/include/we_classes/SEEM/we_SEEM.class.php
on line 621

据我所知,这是导致问题的较新版本的 PHP。这是代码:
function getAllHrefs($code){

$trenner = "[\040|\n|\t|\r]*";

$pattern = "/<(a".$trenner."[^>]+href".$trenner."[=\"|=\'|=\\\\|=]*".$trenner.")
([^\'\">\040? \\\]*)([^\"\' \040\\\\>]*)(".$trenner."[^>]*)>/sie";

preg_match_all($pattern, $code, $allLinks); // ---- line 621
return $allLinks;

}

我如何调整它以在此服务器上使用较新版本的 php?

提前致谢,我的巫毒教不够强大;)

最佳答案

[...] 是字符类,它们匹配括号之间的任何字符,您不必在它们之间添加 |。见 character classes

所以 [abcd] 将匹配 a or b or c or d

如果要匹配多个字符的交替,例如 red or blue or yellow ,请使用子模式:

"(red|blue|yellow)"

你猜对了, [abcd] 等价于 (a|b|c|d)

所以这是你可以为你的正则表达式做的事情:

为了
$trenner = "[\040|\n|\t|\r]*";

改写这个:
$trenner = "[\040\n\t\r]*";

而对于
"[=\"|=\'|=\\\\|=]"

你可以做
"(=\"|=\'|=\\\\|=)"

或者
"=[\"'\\\\]?"

顺便说一句,您可以使用 \s 而不是 $trenner (请参阅 http://www.php.net/manual/en/regexp.reference.escape.php )

关于php - 编译失败 : POSIX collating elements are not supported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173787/

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