如何更换" \\"在使用正则表达式的URL?

时间:2014-05-07 12:03:04

标签: php regex

$tag_path = "c:\work\link2\\tmp\\5699\\tables";

我想在\\tables中删除仅限最后 $tag_path

我使用了以下代码:

$tag_path = preg_replace("/\\\\tables$/i", "", $tag_path);

但它返回了以下结果:

c:\work\link2\\tmp\\5699\

为什么呢?如何删除\\tables中的最后一个$tag_path

如果我回显tag_path="c:\work\link2\tmp\5699",但我写了日志tag_path="c:\work\link2\\tmp\\5699\"

2 个答案:

答案 0 :(得分:2)

只需:

str_replace('\\tables', '', $tag_path);

......应该做的工作。请注意,我使用单引号,而我使用str_replace()支持preg_replace(),因为您将要替换常量模式,而不是正则表达式。在这种情况下,str_replace()更简单,因此更快。


<强>更新

在评论中,您告诉您只有在路径末尾才能替换\\tables。那么正则表达式是正确的解决方案。使用这个:

preg_replace('~\\\\tables$~', '', $tag_path);

此处单引号也可以解决这个问题。检查this answer,这很好地解释了这一点。此外,我使用~作为模式分隔符以获得更清晰。

答案 1 :(得分:1)

使用strrpos()作为最后\\的后备。 (没有严格的规则

如果您的tablesTABLEStab或上一个\\之后的任何其他数据

,这甚至有效
echo substr($tag_path,0,strrpos($tag_path,'\\'));

Demonstration