Штука в том, что обратный слэш имеет особое значение в php и особое значение в регулярках.
Запустите интерактивный пхп (из консоли php -a
) и введите:
echo "\\";
Как видите пхп вывел только один слэш. Дело в том, что слэш в этом контексте это экранирующий символ и чтобы он не был экранирующим символом, надо его экранировать :-)
В регулярке слэш тоже экранирующий символ и вы совершенно справедливо написали \\
. Но только \\
превратится \
во время парсинга строки и в функцию preg_replace попадёт /[\]/i
(то есть экранированная скобка). Чтобы этого избежать надо экранировать оба слэша: /[\\\\]/i
.
Попробуйте в консоли
echo "/[\\\\]/i";
Обратите внимание, что для простой замены символа (или набора символов) можно использовать и другие функции php: str_replace, substr_replace, strtr.
А если вы всё-таки хотите использовать регулярки, то тут вам не нужен символьный класс (квадратные скобки) и нечувствительность к регистру (i), можно просто написать /\\\\/
.