php regex replace double backslash with single

Mikkel Rev picture Mikkel Rev · Jan 12, 2014 · Viewed 11.1k times · Source

I do not want to use stripslashes() because I only want to replace "\\" with "\".

I tried preg_replace("/\\\\/", "\\", '2\\sin(\\pi s)\\Gamma(s)\\zeta(s) = i\\oint_C \\frac{-x^{s-1}}{e^x -1} \\mathrm{d}x');

Which to my disapointment returns: 2\\sin(\\pi s)\\Gamma(s)\\zeta(s) = i\\oint_C \\frac{-x^{s-1}}{e^x -1} \\mathrm{d}x

Various online regex testers indicate that the above should work. Why is it not?

Answer

Stefan Nuxoll picture Stefan Nuxoll · Jan 12, 2014

First, like many other people are stating, regular expressions might be too heavy of a tool for the job, the solution you are using should work however.

$newstr = preg_replace('/\\\\/', '\\', $mystr);

Will give you the expected result, note that preg_replace returns a new string and does not modify the existing one in-place which may be what you are getting hung up on.

You can also use the less expensive str_replace in this case:

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

This approach costs much less CPU time and memory since it doesn't need to compile a regular expression for a simple task such as this.