好吧,这个问题似乎超出了我的想象!
我有这个代码:
$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),并且发生了同样的事情。
最佳答案
嗯,我个人会使用另一个字符作为分隔符,例如“#”,因为 $ 字符是正则表达式特殊字符,它与应用正则表达式模式的字符串末尾匹配。也就是说,有几次我必须在 Windows 服务器上工作,我发现每个正则表达式都必须通过 preg_quote 函数传递,不管它是否包含 regexp 特殊字符。
$request=preg_replace('#(^'.preg_quote($webRoot).')#i','',$requestUri);
关于php - preg_replace(),未找到结束分隔符 '$',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502606/