Не экранируется обратная слэш

Статус
В этой теме нельзя размещать новые ответы.

dump1111

Участник
Регистрация
7 Июл 2009
Сообщения
266
Реакции
8
Вот код:
Код:
<?php
$content = 'the\?';
echo preg_replace('|\\\?|si','',$content);
?>

Код выводит the?
а должен бы the
Почему так? И как экранировать обратную слэш?
 
PHP:
$content = 'the\?';
echo preg_replace('|\\\\\?|si','',$content);
 
Да, действительно начало работать. А почему именно 4 обратных слэши для экранирования одной?
 
Да, действительно начало работать. А почему именно 4 обратных слэши для экранирования одной?
потомучто что бы экранировать обратный слеш надо поставить перед ним еще один.
то есть ты экранировал 1 слеш, а второй - нет.
 
потомучто что бы экранировать обратный слеш надо поставить перед ним еще один.
то есть ты экранировал 1 слеш, а второй - нет.

так он и спрашивает - почему для экранирования одного слэша понадобилось использовать аж четыре?
 
так он и спрашивает - почему для экранирования одного слэша понадобилось использовать аж четыре?
ты специально посты набираешь?
Код смотри который ТС привел:
echo preg_replace('|\\\?|si','',$content);
он экранировал только один слеш, второй - нет.
 
Сначала php определяет, какую строку передаем в функцию. При этом двойные слеши заменяются на одиночные. Если вместо двойного встречается одиночный, то он остается одиночным при условии, что после него нет символа, который требуется экранировать.
После этого работает уже аппарат регулярных выражений, который по новой действует по указанной выше схеме. В итоге слеши, которые идут подряд, уменьшатся в 4 раза. А пятый слеш нужен для экранирования "?" в регулярном выражении.
 
ты специально посты набираешь?
Код смотри который ТС привел:
он экранировал только один слеш, второй - нет.

мне посты набирать уже давно без надобности. ТС экранировал один слэш и один знак вопроса, смотри внимательнее, ну нету там ДВУХ слэшей, там "экранирующий_слэш\экранирующий_слэш?", чтобы получить "\?". постом выше кстати уже все разжевано.
 
При этом двойные слеши заменяются на одиночные.
Ну это они заменяются только если слэши находятся в двойных кавычках, а в одинарных два слэша это так и есть два слэша. Ну вот ещё один пример:
Код:
<?php
echo preg_replace('#\\\h#i','','ght\h');
?>
Выводит ght
Т.е. нужно как минимум три обратных слэши, чтобы экранировать одну. А зачем? Ведь по идее можно было написать echo preg_replace('#\h#i','','ght\h');
и всё должно было работать, но не работает. Почему?
Ведь само выражение \h не является специальным, h хоть в двойных, хоть в одинарных никак не интерпретируется, и врегулярных никак не интерпретируеся, тогда почему нужно три обратных слэши?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху