[решено] StringRegExpReplace непонятен синтаксис

Ответить
Аватара пользователя
AlexM

[решено] StringRegExpReplace непонятен синтаксис

Сообщение AlexM »

Наткнулся на полезную функцию в
http://autoit-script.ru/index.php.htm?topic=2805.0
. Читал help смотрел примеры, так и не понял,



1) $sLocation = StringRegExpReplace($sResponse, "(?s).*Location: (.*?)[\r\n].*", "\1")

Зачем .* - ведь вроде перед Location: нет 2х одинаковых подряд символов.



2) как мне из





window.location.replace("/files/75350.pdf");





выделять



files/75350.pdf



Помогите пожалуйста разобраться с функцией. Спасибо!



По 2 получилось StringRegExpReplace($ReDirect1, "(?s).*window.location.replace[(][""]/(.*?)["");\r\n].*", "\1")



Однако хотелось бы на будущее понимать функцию, поэтому вопрос 1 остался, хотя я сейчас понимаю .* как набор любых символов. Тогда зачем (?s) в начале?



3) Почему замена [(][""] на [(""] приводит к сбою результата?



4) почему 3й параметр "\1" хотя в help это flag и он - число?



Спасибо!
Аватара пользователя
AZJIO

Re: [решено] StringRegExpReplace непонятен синтаксис

Сообщение AZJIO »

AlexM, вот ещё вариант попробуй

(?si)(?:.*window.location.replace\("\/)(.*?)(?:"\);\r\n.*)



Для справки посмотри утилиту
RegExp
. Там есть справка в виде HTML и справка в виде Library_Example.ini, который нужно открыть утилитой и пробовать работу регулярок в действии.



4. "\1" - это не может быть флагом, так как третий параметр "replace" - элемент замены. Комбинация "\1" - замена на первую группу. Группы определяются скобками. Кроме закомментированных скобок /(



1. .* - в чём поиск? Где то есть, а где то нет. Комбинация предполагает даже отсутствие символов.



2. (?s) - в справке: чтобы комбинация .* включала переносы строк. Иначе для многострочного текста работать не будет.



3. [(][""] - это вообще не понятно... [(] - квадратные скобки определяют набор символов, а один символ не понятно зачем туда совать/толкать. [""] - одинаковые символы тоже бессмысленно толкать. Набор символов внутри квадратных скобок подрозумевает один символ из возможного набора символов, а если набор из двух одинаковых или одного символа, то идея теряется, его можно не заключать в квадратные скобки.



Ну кроме этого хочется добавить, что регулярное выражение должно не только найти правильный результат, но и исключить ложное срабатывание... К примеру такая регулярка

(?s)(?:.*\("\/)(.*?)(?:".*)

тоже будет работать, но стоит чуть изменить текст поиска и либо произойдёт захват ненужного, либо игнорирование нужного.
Аватара пользователя
Creat0R

Re: [решено] StringRegExpReplace непонятен синтаксис

Сообщение Creat0R »

AlexM,

Предупреждение за нарушение правил форума,
пункт 2.7
и
пункт 3.19
:




Цитата:



2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...

Подробнее о принципах создания тем читайте в
этом документе
и Правилах форумов.



3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме,
измените ее заголовок на осмысленный
и напишите об этом в теме.



Переименуйте пожалуйста тему (
Как переименовать свою тему?
).
Ответить

Вернуться в «AutoIt»