Forum Webscript.Ru

Программирование => Регулярные выражения => Тема начата: PHP'шкин от 22 Марта 2008, 00:04:54

Название: Что это значит?
Отправлено: PHP'шкин от 22 Марта 2008, 00:04:54
Попалось мне такое регулярное выражение:

preg_match("/revalidate(.*?)Location/is", $aa, $bb)

Сколько не искал, так не нашел, что значит в этом выражении последовательность "(.*?)" и "is" после слеша в конце. Кто знает, объясните по-подробнее (ссылки приветствуются). Спасибо
Название: Что это значит?
Отправлено: PHP'шкин от 22 Марта 2008, 17:33:04
Вроде сюда написал. Что не знает никто?
Название: Что это значит?
Отправлено: Altaxar от 24 Марта 2008, 12:15:37
(.*?)- соотведствует любой строке или пустоте, от revalidate до первого совпадения Location и все это передать в массив.
/is - настройки регулярки,
сылки: google -> "Регулярные выражения" -> Search
там найдеш подробно обо всем.
Название: Что это значит?
Отправлено: So1 от 24 Марта 2008, 23:24:45
(.*?) - люая строка или ее отсутствие. Данные .*? могут быть получены через $1.
Тут любая строка задается через .* и использование минимизатора квантификатора ? по сути является бессмысленным, т.е. будет работать и без знака вопроса.
/is:
i говорит о том что не важен регистр символов
s говорит о том что метасимвол ТОЧКА используется для всех символов включая символ новой строки, т.е. ищутся совпадения такие как:
revalidateLocation
revalidate тра ля ля Location
revalidate тра
ля ля
Location

Для первого случая в $1 = "", для второго случая $1 будет содержать "тра ля ля", третий $1 = " тра \\nля ля \\n".

Благодаря /i еще валидно следующее
REVALIDATE>>>LOCATION


В помощь гугл. Ну а там уже посмотришь запросы какие нужны. Я думаю что есть смысл глянуть что то вроде
"PCRE модификаторы"
"синтаксис PCRE REGEX"
Название: Что это значит?
Отправлено: PHP'шкин от 25 Марта 2008, 01:30:33
Всем спасибо за ответы.
Цитировать
Тут любая строка задается через .* и использование минимизатора квантификатора ? по сути является бессмысленным, т.е. будет работать и без знака вопроса.

Как показали эксперименты, при отсутствии знака вопроса регулярное выражение находит все строки в плоть до последнего включения строки Location (когда их несколько). При наличии знака вопроса строка Location входит в результат только единожды (при первом входе в $aa).