Добрый вечер. Недавно начал изучать php и регулярные выражения.
В книгах, на сайтах сказано, что чтобы экранировать метасимвол нужно поставить перед ним \
указываю выражение
\$.{0,5} то есть искать доллар и еще от 0 до 5 каких нибудь символов
и система ничего не находит.
Если вместо $ поставить другие метасимволы то все работает
сам $ в тексте экранирован и не обрабатывается.
в конструкторе рег выражений javascript это же выражение вставляю и все тоже работает.
Единственное что помогает это ставить два слеша \\$.{0,5}
или заносить вот сюда [\$].{0,5}
тогда все ок.
В чем может быть причина?
1. manking - 13 Мая, 2010 - 21:41:27 - перейти к сообщению
2. koldya - 13 Мая, 2010 - 22:58:02 - перейти к сообщению
Я не очень разбираюсь в регулярных выражениях, но как я понимаю знак $ означает конец строки , тойсть вы ищите еше 5 значений после конца а их там нет и вот оно возвращает пустоту.
PS. Может и не правильно я думаю, но это то что пришло на ум.
PS. Может и не правильно я думаю, но это то что пришло на ум.
3. JustUserR - 14 Мая, 2010 - 09:33:36 - перейти к сообщению
manking пишет:
На самом деле вот в чем - в Perl или JS регулярные выражения являются настоящим типом данных и вводятся без кавычек и для экранирования метасимовлов применяется знак доллара В PHP же особого типа нет и они являются обычной строкой и поэтому нужно произвести двойное экранирование - сначала от интерполяции долларовой переменной а потом уже от метасимвола регулярного выражения - возможно использование одиночных кавычек позволит вам делать одиночное экранированиеВ чем может быть причина?
koldya пишет:
Знак доллара может означат конец строки однако любой метасимвол в регулярных выражения несложно экранируется с помощью обратного слеша
Я не очень разбираюсь в регулярных выражениях, но как я понимаю знак $ означает конец строки , тойсть вы ищите еше 5 значений после конца а их там нет и вот оно возвращает пустоту.
4. manking - 14 Мая, 2010 - 11:50:21 - перейти к сообщению
Да с одиночными кавычками работает, спасибо.
А это нормальная ситуация? Ей и нужно пользоватся?
Если скажем через пару месяцев обновлю php до новой версии то не полезут ошибки?
А это нормальная ситуация? Ей и нужно пользоватся?
Если скажем через пару месяцев обновлю php до новой версии то не полезут ошибки?
5. Champion - 14 Мая, 2010 - 18:22:22 - перейти к сообщению
Нет, ошибки не полезут. Когда пользуешься двойными кавычками, учитывай, что сначала подстановки проходят в них, а потом, если строка передается в другую функцию, в которой тоже могут происходить подстановки, то и там тоже происходят подстановки, и чтоб спецсивол потерял свое назначение в итоге, нужно его проэкранировать столько раз, сколько нужно.
(Добавление)
Мда, не очень я ясно выразился...
(Добавление)
Мда, не очень я ясно выразился...
6. manking - 14 Мая, 2010 - 23:09:23 - перейти к сообщению
Спасибо, в принципе уже разобрался.
7. JustUserR - 15 Мая, 2010 - 13:37:57 - перейти к сообщению
manking пишет:
Пожалуйста! Это весьма нормальная ситуация и ошибки в последующих версиях могут возникнуть только в одном случае - если в PHP введут новый типа данных RegExp который позволяет записывать регулярные выражения в исходном коде PHP без кавычек А пока регулярные выраженя остаются строками то поведение меняться не может - потому что это встроенный в PHP метод интерполяции строк который не меняется уже долгое время
Да с одиночными кавычками работает, спасибо.
А это нормальная ситуация? Ей и нужно пользоватся?
Если скажем через пару месяцев обновлю php до новой версии то не полезут ошибки?
А это нормальная ситуация? Ей и нужно пользоватся?
Если скажем через пару месяцев обновлю php до новой версии то не полезут ошибки?