[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Экранирование обратного слеша
SAYLOR
У меня возникла проблема с экранированием обратного слеша в регулярном выражением.
Согласно всему что я читал в интернете экранировать обратный слеш нужно простым дублированием обратного слеша, но у меня но при написании PCRE выражения:
"/\\/"
браузер выдает ошибку что не найден конечный разделитель, а при
"/\\\/"
все нормально.
В чем может быть причина?
php версии 5.3.3



Спустя 15 минут, 27 секунд (28.07.2011 - 21:00) Winston написал(а):
Все правильно, а ты разберись
"/\\/"
Предпоследний слеш экранирует последний, а второй остается не экранированным smile.gif
А чтобы не было такого геммора пиши так
"#здесь_шаблон#" и можешь не экранировать слеши smile.gif

Спустя 16 минут, 54 секунды (28.07.2011 - 21:17) Invis1ble написал(а):
SAYLOR
это называется "синдром зубочисток" smile.gif

PHPprogrammer
В данном случае смена delimiter'а не решает проблему

Спустя 5 минут, 28 секунд (28.07.2011 - 21:22) neadekvat написал(а):
Цитата (PHPprogrammer @ 28.07.2011 - 22:00)
Все правильно, а ты разберись
"/\\/"
Предпоследний слеш экранирует последний, а второй остается не экранированным

Читать справа налево - конечно же все правильно.

Цитата (Invis1ble @ 28.07.2011 - 22:17)
В данном случае смена delimiter'а не решает проблему

Смена названных символов избавляет от необходимости экранировать /, что очень помогает, когда в регулярке есть теги.

Спустя 21 минута, 49 секунд (28.07.2011 - 21:44) SAYLOR написал(а):
экранировать / я и не собирался, и по идее например такой код


preg_match_all("/\\/",$strang,$arr,PREG_OFFSET_CAPTURE);

должен работать, ведь \\ не должен распространяется на разделители, а просто экранировать обратный слеш.
Цитата
В данном случае смена delimiter'а не решает проблему


Да дельствительно, проблема в том что php пару символов \\ воспринимает как один \ и вместо экранирования обратного слеша экранирует следующий символ( в моем случае разделитель)

Читать справа налево - как именно, как если бы символы были в обратном порядке?

Спустя 6 минут, 58 секунд (28.07.2011 - 21:51) neadekvat написал(а):
"/\\/"
Что за это регулярка вообще? оО
Что-то мне подсказывает, что задача решается с помощью строковых функций.

Спустя 2 минуты, 11 секунд (28.07.2011 - 21:53) alex12060 написал(а):
попробуй с preg_quote() поиграться.

Спустя 7 минут (28.07.2011 - 22:00) SAYLOR написал(а):
Регулярка практической ценности не представляет никакой, но смысл не в ней а в том почему символ \ нормально не экранируется, ведь может возникнуть ситуация когда в выражении нужно будет добавить поиск обратного слеша, и написав \\ результат будет не ожиданный

Спустя 2 минуты, 38 секунд (28.07.2011 - 22:03) Winston написал(а):
SAYLOR
Вам поможет preg_quote()
preg_match_all(preg_quote("/\\/"),$strang,$arr,PREG_OFFSET_CAPTURE);

Спустя 20 минут, 6 секунд (28.07.2011 - 22:23) SAYLOR написал(а):
да помогло))) всем спасибо

Спустя 4 минуты, 30 секунд (28.07.2011 - 22:28) SAYLOR написал(а):
И я похоже понял почему ошибка возникала.
Видимо php интерпретатор встречая строку автоматически экранирует управляющие последовательности и возвращает один символ, а потом что получилось передает в функцию

Спустя 3 минуты, 51 секунда (28.07.2011 - 22:31) Winston написал(а):
Цитата (SAYLOR @ 28.07.2011 - 22:28)
Видимо php интерпретатор встречая строку автоматически экранирует

Никак нет. Если бы такое и было, то ф-и для экранирования и подобного, просто были бы лишние.

Спустя 7 минут, 58 секунд (28.07.2011 - 22:39) SAYLOR написал(а):
я имел ввиду что если интерпретатор встречает в строке экранированную последовательность например \ / то он заменяет ее на один символ /, и в дальнейшем в функцию передается только 1 символ

Спустя 2 минуты, 41 секунда (28.07.2011 - 22:42) Winston написал(а):
Цитата (SAYLOR @ 28.07.2011 - 22:39)
я имел ввиду что если интерпретатор встречает в строке экранированную последовательность например \ / то он заменяет ее на один символ /, и в дальнейшем в функцию передается только 1 символ

Это да
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.