Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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正则表达式将双反斜杠替换为单反斜杠_Php_Regex_Backslash - Fatal编程技术网

php正则表达式将双反斜杠替换为单反斜杠

php正则表达式将双反斜杠替换为单反斜杠,php,regex,backslash,Php,Regex,Backslash,我不想使用stripslashes(),因为我只想用“\”替换“\” 我尝试了preg\u replace(“/\ \ \/”,“\ \”,'2\\sin(\\pi s)\\Gamma(s)\\zeta(s)=I\\oint\u C\\frac{e^x-1}\\mathrm{d}x') 对我来说,它返回:2\\sin(\\pi s)\\Gamma(s)\\zeta(s)=i\\oint\u C\\frac{-x^{s-1}{e^x-1}\\mathrm{d}x 各种在线regex测试人员都表示上

我不想使用
stripslashes()
,因为我只想用“\”替换“\”

我尝试了
preg\u replace(“/\ \ \/”,“\ \”,'2\\sin(\\pi s)\\Gamma(s)\\zeta(s)=I\\oint\u C\\frac{e^x-1}\\mathrm{d}x')

对我来说,它返回:
2\\sin(\\pi s)\\Gamma(s)\\zeta(s)=i\\oint\u C\\frac{-x^{s-1}{e^x-1}\\mathrm{d}x


各种在线regex测试人员都表示上述方法应该有效。为什么不呢?

您不需要为此使用正则表达式,请使用

$newstr = str_replace("\\\\", "\\", $mystr);

首先看

,就像许多其他人所说的那样,正则表达式对于这项工作来说可能是一个过于沉重的工具,但是您使用的解决方案应该可以工作

$newstr = preg_replace('/\\\\/', '\\', $mystr);
将为您提供预期的结果,请注意,preg_replace返回一个新字符串,并且不会修改现有的字符串,这可能是您遇到的问题

在这种情况下,您也可以使用较便宜的str_替换:

$newstr = str_replace('\\\\', '\\', $mystr);

这种方法花费的CPU时间和内存要少得多,因为它不需要为这样的简单任务编译正则表达式。

您的实际代码是什么?您是在执行
$a=preg\u replace(…$a)
还是只调用preg\u replace而没有实际保存其结果?首先:尝试
preg\u replace('/\\\\\\/','\\','2\\sin(…);
(单引号)。然后阅读
str\u replace()
,对于该作业来说,egex是错误的工具。是否可以使用str\u replace('/'/','/','/',$variable);一个相关的问题(将single\替换为double\):您的代码将抛出一个解析错误。它应该是
$newqsstr=str\u replace(“\\\\”,“\\\”,$mystr);
@SharanyaDutta谢谢,我一定是把replace调用弄错了。编辑了它。很抱歉这个错误!@UliKöhler更简单更好,对吧,因为使用regex
“/\\\/”
您将匹配单个反斜杠,因为引擎需要一个转义反斜杠来匹配文字反斜杠,因为反斜杠在正则表达式中有一个。因此,将双反斜杠与双引号str模式匹配将是
“/\\\\{2}/”