When testing an answer for another user’s question I found something I don’t understand. The problem was to replace all literal \t \n \r characters from a string with a single space.
Now, the first pattern I tried was:
/(?:\\[trn])+/
which surprisingly didn’t work. I tried the same pattern in Perl and it worked fine. After some trial and error I found that PHP wants 3 or 4 backslashes for that pattern to match, as in:
/(?:\\\\[trn])+/
or
/(?:\\\[trn])+/
these patterns – to my surprise – both work. Why are these extra backslashes necessary?
You need 4 backslashes to represent 1 in regex because:
"\\\\" -> \\)\\ -> \)From the PHP doc,
Hence for
\\\[,\, one stay because\[is invalid ("\\\[" -> \\[)\\[ -> \[)Yes it works, but not a good practice.