Что нового

Подставить имя файла в конец http адреса с помощью регулярных выражений

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v3.3.8.0

Подскажите пожалуйста как правильно подставить имя файла в конец адресной строки.

Делаю так:
Код:
$str = "http://data-cdn.mbamupdates.com/v0/program/data/"
Local $Matches = StringRegExp($str, "*.exe", 1)
InetGet($Matches, @ScriptDir & '\', 1, 1)


Но не работает код(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ivsatel [?]
как правильно подставить имя файла в конец адресной строки
А при чём здесь RegExp?

Код:
$str = "http://data-cdn.mbamupdates.com/v0/program/data/"
InetGet($str & "имя_файла", @ScriptDir & '\', 1, 1)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ivsatel [?]
Имя файла может меняться. Подставить по шаблону *.exe т.е. имя любое расширение exe.
Вопрос остался прежним, при чём здесь RegExp?

InetGet не поддерживает wildcards (шаблоны).
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
CreatoR Есть другой способ получить окончание URL адреса?
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
ivsatel
у тебя примерно такая строчка ?
http://data-cdn.mbamupdates.com/v0/program/data/imya.exe ?
и изнеё нада вытащить imya.exe?


Добавлено:
Сообщение автоматически объединено:

Код:
$t="http://data-cdn.mbamupdates.com/v0/program/data/imya.exe"
$g=StringRegExp($t, "http://data-cdn.mbamupdates.com/v0/program/data/(.+?).exe",1)
MsgBox(0,0,$g[0])
бред я пишу :wacko:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ivsatel [?]
Есть другой способ получить окончание URL адреса?
Это уже совсем другой вопрос.

Или вы не различаете слово «Подставить» от «Получить»?

Получить можно так:
Код:
$sURL = 'http://data-cdn.mbamupdates.com/v0/program/data/file.exe'
$sFileName = StringRegExpReplace($sURL, '^.*/', '')
ConsoleWrite($sFileName & @LF)
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
CreatoR, winstan Да действительно моя оплошность, нужно именно "Получить". При такой строчке:
http://data-cdn.mbamupdates.com/v0/program/data/
Т.е. адрес с именем файла выглядит полностью так:
http://data-cdn.mbamupdates.com/v0/program/data/mbam-setup-1.60.1.1000.exe
Окончание этой ссылки может меняться. На любое значение. К примеру сейчас mbam-setup-1.60.1.1000.exe. Через месяц изменится версия билда и будет по другому, а хотелось как нибудь универсально это обойти)

Пока сделал так:

Код:
$sURL = 'http://data-cdn.mbamupdates.com/v0/program/data/mbam-setup-1.60.1.1000.exe'
$shURL = 'http://data-cdn.mbamupdates.com/v0/program/data/'
$sFileName = StringRegExpReplace($sURL, 'http://(?i)data-cdn.mbamupdates.com/v0/program/data/(.*?)(?i)', '')
InetGet($shURL & $sFileName, @ScriptDir & '\mbam-setup.exe', 1, 1)


Не знаю на сколько это правильно(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ivsatel [?]
Окончание этой ссылки может меняться. На любое значение
Вопрос откуда она берётся и что с ней нужно делать?

К примеру сейчас mbam-setup-1.60.1.1000.exe. Через месяц изменится версия билда и будет по другому, а хотелось как нибудь универсально это обойти)
Ну вот меня интуиция вроде снова не подвела.
Нужно скачивать файл по ссылке, где имя файла неизвестно, верно?

Значит всё таки не получить, а именно подставить :smile:

Может проще описать полную задачу, а не ходить вокруг да около.
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
CreatoR
Может проще описать полную задачу, а не ходить вокруг да около.

Задача простейшая. По запросу начать закачку инсталлятора, расположенного на сайте производителя. В данном случае это Malwarebytes Anti-Malware. Файлы обновленных инсталляторов они размещают либо на файлообменнике либо по этой ссылке:
http://data-cdn.mbamupdates.com/v0/program/data/mbam-setup-1.60.1.1000.exe
В html коде страницу просмотреть нельзя, только окончательный вариант ссылки. В этом и проблема. Как помочь InetGet в следующий раз (при обновлении билда) выудить имя нового файла?
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Попробовал переделать:

Код:
#include <INet.au3> ;Подключаю библиотеку

$URL = 'http://samlab.ws/category/antivirus/' ;Адрес странички с содержимым
$HTML = _INetGetSource($URL) ;Получить содержимое
$Reg = StringRegExp($HTML, 'http://data-cdn.mbamupdates.com/(.*?)"', 3) ;Искать нужное и присвоить переменной
MsgBox(0, 111, $Reg) ;Вывести запрашиваемое


Не пойму, что не так? :wacko:
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
ivsatel
StringRegExp возвращает массив данных, а не строку с результатом.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ivsatel,
Попробуйте так.
Код:
$sUrl = 'http://samlab.ws/category/antivirus/'
$sSourse = InetRead($sUrl, 17)
If @error Then
	MsgBox(16, 'Error', 'InetRead')
	Exit
EndIf
$sSourse = BinaryToString($sSourse)
$sLink = StringRegExpReplace($sSourse, '(?s).*href="(http://data-cdn.mbamupdates.com/.*?exe)">.*', '$1')
If @extended = 1 Then
	$sFileName = StringRegExpReplace($sLink, '^.*/', '')
	MsgBox(64, 'Info', 'Link: ' & $sLink & @LF & 'FileName: ' & $sFileName)
Else
	MsgBox(16, 'Error', 'StringRegExpReplace')
	Exit
EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ivsatel
У вас талант запутывать ситуацию до невозможного.

В самом начале нельзя было всё это изложить (откуда ссылка берётся, и что нужно получить)?
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Medic84 Понял
madmasles Да!!! Это то, что нужно!!!
CreatoR Изменил место получения ссылки. Раз с оф. не получится, обращаюсь (в данном случае) к samlab.ws, думаю самый простой способ получить правильную и свежую ссылку на последний билд. Спасибо за терпение)

Medic84, madmasles, CreatoR Еще раз спасибо!
 
Верх