1

Тема: AHK: Избавиться от жадности при запросе назад

Подскажите, пожалуйста, как добиться того, чтобы в куче текста велся поиск по расширению zip
А потом брался ближащий к нему http
Вот неработающий абстрактный пример:

var := "http://site.net/test.rarhttp://site.net/test.ziphttp://site.net/test.rar"
regexmatch(var, "(http.+?\K\.zip)", match)
msgbox % match1

2

Re: AHK: Избавиться от жадности при запросе назад

Malcev, Для абстрактной кучи ссылок:

RegExMatch(var, "http://[^:]+\.zip", m)
MsgBox % m

---------------

Внимание! Исправьте следующие ошибки, чтобы добавить сообщение:

    Слишком много ссылок в сообщении. Разрешено 3 ссылок. Уменьшите количество ссылок.

Да вы верно шутите.

3

Re: AHK: Избавиться от жадности при запросе назад

Спасибо!
А можете объяснить принцип работы?
Как это понять?

[^:]

4 (изменено: bWRmeA, 2014-03-12 14:49:42)

Re: AHK: Избавиться от жадности при запросе назад

[^:] - один символ не являющийся двоеточием.

Принцип работы: var начинает посимвольно обрабатываться слева на право, выражение начинается с "h" поэтому ищется именно этот символ. Первый символ var соответствует первому символу выражения - позиция "h" в var запоминается и начинается проверка соответствия выражению символов следующих после "h", если используется ".+" то после http будут найдены  все символы до .zip
Когда используется [^:]+ ищется любой символ но не ":", потому, при достижении второго двоеточия в var поиск проваливается и начинается с сохранённой позиции "h" + 1 ( вновь ищется h ) со второй попытки находится начало нужной ссылки, в теле которой двоеточие отсутствует - успех, ликование, финиш.

5

Re: AHK: Избавиться от жадности при запросе назад

А почему именно двоеточием?

6 (изменено: bWRmeA, 2014-03-12 14:55:16)

Re: AHK: Избавиться от жадности при запросе назад

Потому что двоеточие в var - условный разделитель для кучи ссылок.

Кстати, в первом примере нет запроса назад. \K отбрасывает часть результата, но выражение всё так же ищется слева на право.

7

Re: AHK: Избавиться от жадности при запросе назад

Спасибо. Сейчас дошло
А почему в первом примере не ищется справа на лево?
Какова тогда функция \K ?

8

Re: AHK: Избавиться от жадности при запросе назад

В Regular Expression Callouts в Auto-Callout есть скрипт для дебага выражений, пользуйся, вникай, читай документацию PCRE.

9

Re: AHK: Избавиться от жадности при запросе назад

На практике, двоеточие может встретится в одном урл не один раз.
http://www.script-coding.com/URL.html

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10 (изменено: bWRmeA, 2014-03-12 19:56:20)

Re: AHK: Избавиться от жадности при запросе назад

var := "http://site.net/test.rarhttp://site.net/test.ziphttp://site.net/test.rar"
regexmatch(var, "http://(.(?!http://))+\.zip", match)
msgbox % match

В том и недостаток регекспов, что для каждой конкретной задачи уместно писать новое выражение, а не использовать заготовки.

11

Re: AHK: Избавиться от жадности при запросе назад

Для этой задачи достаточно InStr & SubStr.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Избавиться от жадности при запросе назад

Да регулярные выражения вообще не нужны если есть instr & substr

13

Re: AHK: Избавиться от жадности при запросе назад

Ну как же, иногда они просто незаменимы.
Просто освоить их, многим трудно, а про простейшие функции почему то забывают.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui