Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: не получается нормально экранировать знак $
Форумы портала PHP.SU » PHP » Регулярные выражения » не получается нормально экранировать знак $

Страниц (1): [1]
 

1. manking - 13 Мая, 2010 - 21:41:27 - перейти к сообщению
Добрый вечер. Недавно начал изучать php и регулярные выражения.


В книгах, на сайтах сказано, что чтобы экранировать метасимвол нужно поставить перед ним \
указываю выражение
\$.{0,5} то есть искать доллар и еще от 0 до 5 каких нибудь символов


и система ничего не находит.

Если вместо $ поставить другие метасимволы то все работает
сам $ в тексте экранирован и не обрабатывается.


в конструкторе рег выражений javascript это же выражение вставляю и все тоже работает.

Единственное что помогает это ставить два слеша \\$.{0,5}
или заносить вот сюда [\$].{0,5}

тогда все ок.

В чем может быть причина?
2. koldya - 13 Мая, 2010 - 22:58:02 - перейти к сообщению
Я не очень разбираюсь в регулярных выражениях, но как я понимаю знак $ означает конец строки , тойсть вы ищите еше 5 значений после конца а их там нет и вот оно возвращает пустоту.
PS. Может и не правильно я думаю, но это то что пришло на ум. Улыбка
3. JustUserR - 14 Мая, 2010 - 09:33:36 - перейти к сообщению
manking пишет:
В чем может быть причина?
На самом деле вот в чем - в Perl или JS регулярные выражения являются настоящим типом данных и вводятся без кавычек и для экранирования метасимовлов применяется знак доллара В PHP же особого типа нет и они являются обычной строкой и поэтому нужно произвести двойное экранирование - сначала от интерполяции долларовой переменной а потом уже от метасимвола регулярного выражения - возможно использование одиночных кавычек позволит вам делать одиночное экранирование
koldya пишет:
Я не очень разбираюсь в регулярных выражениях, но как я понимаю знак $ означает конец строки , тойсть вы ищите еше 5 значений после конца а их там нет и вот оно возвращает пустоту.
Знак доллара может означат конец строки однако любой метасимвол в регулярных выражения несложно экранируется с помощью обратного слеша
4. manking - 14 Мая, 2010 - 11:50:21 - перейти к сообщению
Да с одиночными кавычками работает, спасибо.

А это нормальная ситуация? Ей и нужно пользоватся?
Если скажем через пару месяцев обновлю php до новой версии то не полезут ошибки?
5. Champion - 14 Мая, 2010 - 18:22:22 - перейти к сообщению
Нет, ошибки не полезут. Когда пользуешься двойными кавычками, учитывай, что сначала подстановки проходят в них, а потом, если строка передается в другую функцию, в которой тоже могут происходить подстановки, то и там тоже происходят подстановки, и чтоб спецсивол потерял свое назначение в итоге, нужно его проэкранировать столько раз, сколько нужно.
(Добавление)
Мда, не очень я ясно выразился...
6. manking - 14 Мая, 2010 - 23:09:23 - перейти к сообщению
Спасибо, в принципе уже разобрался.
7. JustUserR - 15 Мая, 2010 - 13:37:57 - перейти к сообщению
manking пишет:
Да с одиночными кавычками работает, спасибо.
А это нормальная ситуация? Ей и нужно пользоватся?
Если скажем через пару месяцев обновлю php до новой версии то не полезут ошибки?
Пожалуйста! Это весьма нормальная ситуация и ошибки в последующих версиях могут возникнуть только в одном случае - если в PHP введут новый типа данных RegExp который позволяет записывать регулярные выражения в исходном коде PHP без кавычек А пока регулярные выраженя остаются строками то поведение меняться не может - потому что это встроенный в PHP метод интерполяции строк который не меняется уже долгое время

 

Powered by ExBB FM 1.0 RC1