Показано с 1 по 10 из 12

Тема: RegExp Поиск имени файла

  1. #1
    tolstyj
    tolstyj вне форума
    Участник
    Регистрация
    30.11.2003
    Сообщений
    11

    RegExp Поиск имени файла

    Мне нужно создать регулярное выражение, котороебы находило имя файла в адресе. Например, в строке "https://nobat.ru/img/sampleform.png" оно должно найти в результате "sampleform.png".

    Я просто не могу точно сформулировать критериии поиска. Получилось, чтото такое:"Текст, содержащий буквы и цифры, после символа "/" и до пробела, конца строки или вопросительного знака, содержащий 1 точку (.) и не содержащий символа "/"". Но как-то это громоздко, да к тому же как все времяя используются спецсимволы "/ и ." Может у кого-то есть лучшие идеи?

  2. #2
    akiselev
    akiselev вне форума
    Участник
    Регистрация
    02.11.2002
    Сообщений
    796

    Re:RegExp Поиск имени файла

    http\:\/\/(.*?\/)+(.*?)\s

    должно работать, по идее… если в имени файла пробелов нет. Если есть -- не формализуется имхо.

  3. #3
    tolstyj
    tolstyj вне форума
    Участник
    Регистрация
    30.11.2003
    Сообщений
    11

    Re:RegExp Поиск имени файла

    Нет, не работает. Находит не имя файла, а сайт или каталог. Я правда уже сделал, тоже ограничение на отсутствие пробелов в имени файла. Получилось вот так:
    %SETPATTREGEXP="(?mis)\/((\w|\.|\(|\)|\-)*\.{1}\w+)(\s|\>|\n)"
    %RegExpBlindMatch="%Text"
    Первоначально было попроще, но на практике оказалось, что встречаются и скобки и дефисы и двойные расширения. А теперь у меня родился новый вопрос как можно сцепить два регулярных выражения, но чтобы результаты заносились в разные переменные. Тоесть, есть поиск по имени файла и поиск URL (взят с вашего сайта) :
    %SetPattRegExp="(?mis).*?((http|https|ftp|nntp|etc )://.*?)(\s|\>|\n)"
    %RegExpBlindMatch="%Text"
    Как сделать так, чтобы URL выводился по %SubPatt="1", а имя файла по %SubPatt="2"?

  4. #4
    akiselev
    akiselev вне форума
    Участник
    Регистрация
    02.11.2002
    Сообщений
    796

    Re:RegExp Поиск имени файла

    Так ровно так и сцепить. %SubPatt выполняют те же функции, что $1, $2 и т.д. в Перле.

  5. #5
    tolstyj
    tolstyj вне форума
    Участник
    Регистрация
    30.11.2003
    Сообщений
    11

    Re:RegExp Поиск имени файла

    Цитата Сообщение от Alexander Kiselev
    Так ровно так и сцепить. %SubPatt выполняют те же функции, что $1, $2 и т.д. в Перле.
    Простите, но я не совсем понял, точнее совсем не понял.
    Если эти делать поиск последовательно, то %SubPatt="1" переписывается, а я хочу чтобы получилось две переменных. Мне так кажется, что надо эти два выражения сцепить вместе, но по какому принципы они будут разделяться? Я просто себе это не представляю.

  6. #6
    akiselev
    akiselev вне форума
    Участник
    Регистрация
    02.11.2002
    Сообщений
    796

    Re:RegExp Поиск имени файла

    Почему это он переписывается? Вы просто пишете оба регекспа подряд, а потом долго и нудно считаете скобки. Бат видит первую открывающую скобку, ищет закрывающую к ней и то, что внутри проматчилось, пихает в субпатт=1. Следующая открывающая скобка даст субпатт=2, ну и так далее. То бишь у Вас будет ну не субпатт 1 и 2, а, скажем, 1 и 8. Примеров такого сорта в коллекции регекспов на этом сайте -- до фига.

  7. #7
    tolstyj
    tolstyj вне форума
    Участник
    Регистрация
    30.11.2003
    Сообщений
    11

    Re:RegExp Поиск имени файла

    Цитата Сообщение от Alexander Kiselev
    Вы просто пишете оба регекспа подряд, а потом долго и нудно считаете скобки.
    Если я правильно понял, то должно получиться вот так :
    %SETPATTREGEXP="(?mis).*?((http|https|ftp|nntp|etc )://.*?)(\s|\>|\n)(?mis)\/((\w|\.|\(|\)|\-)*\.{1}\w+)(\s|\>|\n)" (одной строкой)

    Но так вообще ничего не находит.
    Может их как-то разделить нужно, ну скобки, кавычки или еще как?

    Я смотрел примеры (по ним же и делал свое регуляроное выражение) , но именно это и не смог понять, а в той литературе, что есть у меня это не описано.

  8. #8
    akiselev
    akiselev вне форума
    Участник
    Регистрация
    02.11.2002
    Сообщений
    796

    Re:RegExp Поиск имени файла

    Цитата Сообщение от tolstyj
    Если я правильно понял, то должно получиться вот так :
    %SETPATTREGEXP="(?mis).*?((http|https|ftp|nntp|etc )://.*?)(\s|\>|\n)(?mis)\/((\w|\.|\(|\)|\-)*\.{1}\w+)(\s|\>|\n)" (одной строкой)

    Но так вообще ничего не находит.
    Может их как-то разделить нужно, ну скобки, кавычки или еще как?

    Я смотрел примеры (по ним же и делал свое регуляроное выражение) , но именно это и не смог понять, а в той литературе, что есть у меня это не описано.
    %SETPATTREGEXP="(?mis).*?((http|https|ftp|nntp|etc )://)((\w|\.|\(|\)|\-)*\.{1}\w+)(\s|\>|\n)"

    уже должно работать. Ну а каком субпаттерне окажется то, что Вас интересует -- хрен его знает…

  9. #9
    tolstyj
    tolstyj вне форума
    Участник
    Регистрация
    30.11.2003
    Сообщений
    11

    Re:RegExp Поиск имени файла

    Спасибо, я, наконец-то, понял как оно работает. Вот что получилось:
    %SETPATTREGEXP="(?mis).*?((http|https|ftp|nntp|etc )://.*?((\w|\.|\(|\)|\-)*\.{1}\w+)\??(\w|\.|\=|\&|\;|\(|\)|\-)*)(\s|\>|\n)"
    В %SubPatt="1" содержится URL, а в %SubPatt="3" имя файла.

    Но у меня возник новый вопрос, а можно ли сначала сделать преодразование текства, а потом поиск в нем?
    Тоесть имеем текст вида :
    http%3A%2F%2Fwww.blabla.ru%2Ffile.zip и его нужно превратить в http://www.blabla.ru/file.zip, а потом уже выполнить поиск при помощи вышеуказанного регулярного выражения.

    Или может можно сделать так, чтобы TheBat!, при использовании шаблонов запросов, не превращал http://www.blabla.ru/file.zip в http%3A%2F%2Fwww.blabla.ru%2Ffile.zip, а отсылал так как оно есть?

  10. #10
    Vadim
    Vadim вне форума
    Участник Аватар для Vadim
    Регистрация
    01.11.2002
    Сообщений
    4,711

    Re:RegExp Поиск имени файла

    К сожалению Саша теперь сможет ответить на Ваш вопрос только через месяц не раньше в отпуске он :-)

Похожие темы

  1. Regexp
    от roclasb в разделе The Bat!: вопросы и ответы
    Ответов: 0
    Последнее сообщение: 11.03.2014, 08:28
  2. Ответов: 0
    Последнее сообщение: 21.09.2006, 13:02
  3. Тема письма по имени прикрепленного файла
    от cpa3y в разделе The Bat!: вопросы и ответы
    Ответов: 6
    Последнее сообщение: 20.09.2006, 14:48
  4. Ответов: 6
    Последнее сообщение: 15.02.2006, 12:30
  5. Как сделать фильтр по имени приаттаченного файла?
    от anton в разделе The Bat!: вопросы и ответы
    Ответов: 6
    Последнее сообщение: 18.09.2003, 00:53