gpt4 book ai didi

php - preg_replace(),未找到结束分隔符 '$'

转载 作者:可可西里 更新时间:2023-11-01 10:38:47 27 4
gpt4 key购买 nike

好吧,这个问题似乎超出了我的理解范围!

我有这个代码:

$request=preg_replace('$(^'.str_replace('$','\$',$webRoot).')$i','',$requestUri);

这会抛出一个错误:

preg_replace():未找到结束分隔符“$”

但事情是这样的,结尾分隔符肯定在那里。

在该函数调用之后,我回应了以下内容:

echo $webRoot;
echo $requestUri;
echo '$(^'.str_replace('$','\$',$webRoot).')$i';

这是这些 echo 的结果:

/
/en/example/
$(^/)$i

有趣的是,如果我直接这样做:

preg_replace('$(^/)$i','',$requestUri);

..它有效。但这也失败了:

$tmp=str_replace('$','\$',$webRoot);
preg_replace('$(^'.$tmp.')$i','',$requestUri);

为了彻底,我还测试了 echo $tmp 给出的内容,它确实给出了正确的值:

/

它是 Windows 中 PHP 的错误吗?我在 Linux 服务器上试了一下,它按预期工作,没有抛出这个错误。还是我遗漏了什么?

为了确定,我什至将 PHP 更新到最新的 Windows 版本 (5.4.2),同样的事情发生了。

最佳答案

嗯,我个人会使用另一个字符作为分隔符,例如“#”,因为 $ char 是一个正则表达式特殊字符,它匹配应用正则表达式模式的字符串的末尾。也就是说,有几次我不得不在 Windows 服务器上工作,我发现每个正则表达式都必须通过 preg_quote 函数传递,不管它是否包含 regexp 特殊字符。

$request=preg_replace('#(^'.preg_quote($webRoot).')#i','',$requestUri);

关于php - preg_replace(),未找到结束分隔符 '$',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502606/

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