O problema da barra invertida em PHP
A barra invertida é um caractere especial no PHP. Isso significa que, em uma string, se quisermos que a barra invertida represente a si mesma, devemos dobrá-la:
<?php
$str = '\\ \\\\ \\\\\\'; // na verdade a string é '\ \\ \\\'
?>
A barra invertida também é um caractere especial em expressões regulares. Isso significa que, dentro da regex, para que a barra invertida represente a si mesma, ela precisa ser escrita incríveis quatro vezes:
<?php
echo preg_replace('#\\\\#', '!', '\\ \\\\ \\\\\\'); // irá exibir '! ! !!'
?>
Vamos agora escrever uma expressão regular onde
o padrão de busca seja: barra invertida
uma ou mais vezes. Neste caso, escreveremos
o operador + para incríveis 4
caracteres antes dele sem agrupamento:
<?php
echo preg_replace('#\\\\+#', '!', '\\ \\\\ \\\\\\'); // irá exibir '! ! !'
?>
Dada a string:
<?php
$str = 'a\\b c\\d e\\f';
?>
Encontre nesta string todas as substrings pelo padrão letra, barra invertida, letra.
Dada a string:
<?php
$str = 'a\\b c\\\\d e\\\\\\f';
?>
Encontre nesta string todas as substrings pelo padrão letra, barra invertida qualquer quantidade de vezes, letra.