Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2016, 21:12   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию Получение ссылок из HTML

Нужно извлечь из HTML ссылки на ресурсы (картинки, скрипты и пр.). Использую Delphi 7 + TRegExpr.

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  RegExpr in 'regexpr.pas';

var
  html, re: string;
  RegexObj: TRegExpr;

begin
  html :=
    '<script src="http://mysite.ru" type="text/javascript"></script>' + #13#10 +
    '<img src="http://mysite.ru/image.png">' + #13#10 +
    '<img id="img" src=''http://mysite.ru/image.png'' class="img" /> ' + #13#10 +
    '<img id=img src=http://mysite.ru/image.png class=img />' + #13#10;

  re := '<(img|script|link)[^>]+(src|href)=([''"])?((?(3).+?|[^\s>]+))(?(3)\3)';
  //                                   тут ошибка  --^

  RegexObj := TRegExpr.Create;
  RegexObj.ModifierI := true; //case insensitive
  RegexObj.ModifierG := true; //case insensitive
  RegexObj.Expression := re;
  if RegexObj.Exec(html) then
  begin
    repeat
      writeLn(RegexObj.Match[4]);
    until not RegexObj.ExecNext;
  end;
  RegexObj.Free;

  readLn;
end.
snap00999.png

Похоже, что TRegExpr не поддерживает условия. Подскажите, как можно изменить регекс, чтобы извлекало путь как с кавычками, так и без.
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 18.10.2016, 21:16   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Для парсинга HTML лучше брать парсер HTML, а не регекспы.
Но в Дельфи с их наличием вроде как-то не особо.

Если производительность не важна можно взять TWebbrowser/IHTMLDocument2
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.10.2016, 21:18   #3
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

Вот как раз нужно именно регексами (требование заказчика). Чтобы минимум зависимостей и быстро работало.
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 18.10.2016, 21:20   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А задача-то какая исходная?

И точно ли именно Дельфи нужен, да еще и 7?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.10.2016, 21:29   #5
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

Да имено 7. Таково требование заказчика.

Задача: сделать очень упрощённый эмулятор браузера. По заданному URL получить HTML (при помощи synapse это уже сделал), затем получить ссылки на все ресурсы (такие как стили, картинки, скрипты и др.) и просто их скачать без сохранения. Вот и всё.
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 18.10.2016, 21:42   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Судя по требованиям для такой задачи — заказчик или школьник осваивающий Дельфи по каким-нибудь урокам Макрушина, или очень странный человек

А другие варианты регексов не подошли? https://www.google.com/search?q=regex+src+href
или библиотека типа http://www.regular-expressions.info/delphi.html
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.10.2016, 22:36   #7
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А другие варианты регексов не подошли? https://www.google.com/search?q=regex+src+href
или библиотека типа http://www.regular-expressions.info/delphi.html
Спасибо за ссылки. Выбрал TPerlRegEx и с ним пошло.
CraZZZy-GameRRR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсер ссылок HTML Lazio C# (си шарп) 4 14.09.2015 21:15
Получение всех ссылок со страницы nibufep Общие вопросы Delphi 4 19.08.2015 13:02
Получение всех ссылок на видео с сайта Tyoma5891 PHP 5 10.10.2013 13:45
Получение ссылок от родительского компонента на все визуальные дочерние victorixx Компоненты Delphi 2 21.11.2011 09:13
получение списка ссылок на подпапки файлы однойпапки i777 Microsoft Office Excel 3 06.10.2010 23:30