Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “如何替换”\\&引用;在使用正则表达式的URL中?_Php_Regex - Fatal编程技术网

Php “如何替换”\\&引用;在使用正则表达式的URL中?

Php “如何替换”\\&引用;在使用正则表达式的URL中?,php,regex,Php,Regex,我只想删除$tag\u path中最后的\\tables 我使用了下面的代码: $tag_path = "c:\work\link2\\tmp\\5699\\tables"; 但它返回了以下结果: $tag_path = preg_replace("/\\\\tables$/i", "", $tag_path); 为什么??如何删除$tag\u path中最后的\\tables 如果我回显tag\u path=“c:\work\link2\tmp\5699”,但我写日志tag\u path=

我只想删除
$tag\u path
中最后的
\\tables

我使用了下面的代码:

$tag_path = "c:\work\link2\\tmp\\5699\\tables";
但它返回了以下结果:

$tag_path = preg_replace("/\\\\tables$/i", "", $tag_path);
为什么??如何删除
$tag\u path
中最后的
\\tables

如果我回显
tag\u path=“c:\work\link2\tmp\5699”
,但我写日志
tag\u path=“c:\work\link2\\tmp\\5699\”
,只需:

c:\work\link2\\tmp\\5699\
。。。我应该做这项工作。请注意,我使用的是单引号,我使用的是
str_replace()
支持
preg_replace()
,因为您将要替换一个常量模式,而不是正则表达式。在这种情况下,
str_replace()
更简单,因此速度更快


更新

在注释中,您告诉我们,只有在路径结束时才需要替换
\\tables
。那么正则表达式就是正确的解决方案。使用这个:

str_replace('\\tables', '', $tag_path);
这里的单引号也起到了作用。检查哪一个很好地解释了这一点。此外,我正在使用
~
作为模式分隔符,以便更加清晰。

只是:

c:\work\link2\\tmp\\5699\
。。。我应该做这项工作。请注意,我使用的是单引号,我使用的是
str_replace()
支持
preg_replace()
,因为您将要替换一个常量模式,而不是正则表达式。在这种情况下,
str_replace()
更简单,因此速度更快


更新

在注释中,您告诉我们,只有在路径结束时才需要替换
\\tables
。那么正则表达式就是正确的解决方案。使用这个:

str_replace('\\tables', '', $tag_path);
这里的单引号也起到了作用。检查哪一个很好地解释了这一点。此外,我正在使用
~
作为模式分隔符,以便更加清晰。

用作最后一个
\
的查找。(无严格规定)

如果您的
表格
表格
选项卡
或最后一个
\\
之后的任何其他数据,这甚至可以工作

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

用作最后一个
\\
的查找。(无严格规定)

如果您的
表格
表格
选项卡
或最后一个
\\
之后的任何其他数据,这甚至可以工作

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

使用
str_replace()
替换:
str_replace('\\tables','$tag_path)。我只想删除最后一个“\\tables”。如果tag_path有2个'\\tables'可能与@user1497597重复:我不确定它是如何工作的。看见您的
preg\u replace
语句按其应有的方式工作。没有正确的答案请改用
str\u replace()
str\u replace('\\tables','$tag\u path)。我只想删除最后一个“\\tables”。如果tag_path有2个'\\tables'可能与@user1497597重复:我不确定它是如何工作的。看见您的
preg\u replace
语句正常工作。没有正确答案,我只删除最后一个“\\tables”挑剔:这仍然不起作用。要匹配文字反斜杠,您必须编写
\\\\
。(至于原因,请参见。);-)@阿马尔穆拉里嘿,谢谢!。没想到会这样。但现在听起来很有逻辑:)如果我回显tag_path=“c:\work\link2\tmp\5699”,但我写log tag_path=“c:\work\link2\\tmp\\5699\”我只删除最后的“\\tables”挑剔的地方:这仍然不起作用。要匹配文字反斜杠,您必须编写
\\\\
。(至于原因,请参见。);-)@阿马尔穆拉里嘿,谢谢!。没想到会这样。但现在听起来很有逻辑:)如果我回显tag_path=“c:\work\link2\tmp\5699”,但我写log tag_path=“c:\work\link2\\tmp\\5699\”如果我回显tag_path=“c:\work\link2\tmp\5699”,但我写log tag_path=“c:\work\link2\\tmp\\5699\”@user1497597,很容易在末尾加一个斜杠。看到这个否,我使用代码:substr($tag\u path,0,strrpos($tag\u path,'\\');如果我仍然写入日志结果:tag_path=“c:\work\link2\\tmp\\5699\”如果我使用echo tag_path=“c:\work\link2\tmp\5699”,但我写入日志tag_path=“c:\work\link2\\tmp\\5699\”。我回显相同的演示结果。但是写日志,它仍然是错误的。您期望的输出是什么?如果我回显tag_path=“c:\work\link2\tmp\5699”,但我写日志tag_path=“c:\work\link2\\tmp\\5699\”@user1497597,很容易在末尾添加斜杠。看到这个否,我使用代码:substr($tag\u path,0,strrpos($tag\u path,'\\');如果我仍然写入日志结果:tag_path=“c:\work\link2\\tmp\\5699\”如果我使用echo tag_path=“c:\work\link2\tmp\5699”,但我写入日志tag_path=“c:\work\link2\\tmp\\5699\”。我回显相同的演示结果。但写日志时,仍然会出错。您预期的输出是什么?