![]() |
StringRegExpReplace непонятен синтаксис
Наткнулся на полезную функцию в http://autoit-script.ru/index.php?topic=2805.0. Читал help смотрел примеры, так и не понял,
1) $sLocation = StringRegExpReplace($sResponse, "(?s).*Location: (.*?)[\r\n].*", "\1") Зачем .* - ведь вроде перед Location: нет 2х одинаковых подряд символов. 2) как мне из <script type="text/javascript" language="JavaScript"> window.location.replace("/files/75350.pdf"); </script> выделять files/75350.pdf Помогите пожалуйста разобраться с функцией. Спасибо! По 2 получилось StringRegExpReplace($ReDirect1, "(?s).*window.location.replace[(][""]/(.*?)["");\r\n].*", "\1") Однако хотелось бы на будущее понимать функцию, поэтому вопрос 1 остался, хотя я сейчас понимаю .* как набор любых символов. Тогда зачем (?s) в начале? 3) Почему замена [(][""] на [(""] приводит к сбою результата? 4) почему 3й параметр "\1" хотя в help это flag и он - число? Спасибо! |
AlexM, вот ещё вариант попробуй
(?si)(?:.*window.location.replace\("\/)(.*?)(?:"\);\r\n.*) Для справки посмотри утилиту RegExp. Там есть справка в виде HTML и справка в виде Library_Example.ini, который нужно открыть утилитой и пробовать работу регулярок в действии. 4. "\1" - это не может быть флагом, так как третий параметр "replace" - элемент замены. Комбинация "\1" - замена на первую группу. Группы определяются скобками. Кроме закомментированных скобок /( 1. .* - в чём поиск? Где то есть, а где то нет. Комбинация предполагает даже отсутствие символов. 2. (?s) - в справке: чтобы комбинация .* включала переносы строк. Иначе для многострочного текста работать не будет. 3. [(][""] - это вообще не понятно... [(] - квадратные скобки определяют набор символов, а один символ не понятно зачем туда совать/толкать. [""] - одинаковые символы тоже бессмысленно толкать. Набор символов внутри квадратных скобок подрозумевает один символ из возможного набора символов, а если набор из двух одинаковых или одного символа, то идея теряется, его можно не заключать в квадратные скобки. Ну кроме этого хочется добавить, что регулярное выражение должно не только найти правильный результат, но и исключить ложное срабатывание... К примеру такая регулярка (?s)(?:.*\("\/)(.*?)(?:".*) тоже будет работать, но стоит чуть изменить текст поиска и либо произойдёт захват ненужного, либо игнорирование нужного. |
AlexM,
Предупреждение за нарушение правил форума, пункт 2.7 и пункт 3.19: Цитата:
|
Время: 17:32. |
Время: 17:32.
© OSzone.net 2001-