Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > TRegExpr


Автор: TrillerMan 10.11.2007, 16:41
Здрасти всем.Хочу выдрать ссылку с этого сайта http://www.zaycev.net/pages/186/18674.shtml
на этой странице где таблица скачать mp3,есть ссылка с оранжевым текстом mp3

мне нужно её получить,вот нашёл код как работать с tregexp , но к сожалению не могу разобраться,может ктото работал с регэкспами и может составить регулярку для этого сайта?

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

procedure TForm1.BitBtn1Click(Sender: TObject);
 const
  Template = '(?i)Официальный курс ЦБ по доллару'
   + '.*Дата\s*Курс\s*Курс пок.\s*Курс прод. [^<\d]*'
   + '(\d?\d)/(\d?\d)/(\d\d)\s*[\d.]+\s*([\d.]+)';
 begin
  NMHTTP1.Get ('http://win.www.citycat.ru/finance/finmarket/_CBR/');//тут естественно надо вставить ссылку на http://www.zaycev.net/pages/186/18674.shtml просто показываю пример,таким какой он есть
  with TRegExpr.Create do try
     Expression := Template;
     if Exec (NMHTTP1.Body) then begin
       Label1.Caption := Format ('Курс на %s.%s.%s: %s',
         [Match [2], Match [1], Match [3], Match [4]]);
      end;
    finally Free;
   end;
 end;

Автор: MetalFan 10.11.2007, 17:13
а при чем тут приведенный код?!

Автор: TrillerMan 10.11.2007, 17:29
ну он тоже работает с регекспами )))
хотелось бы,чтобы знающий человек составил правильную регекспу,я этого не умею(

Автор: MetalFan 10.11.2007, 18:05
ты бы хоть привел примеры нужных ссылок.
провел бы исследование того сайта.
или предлагаешь за тебя это сделать?

Добавлено @ 18:10
для ссылки вида:
Код

http://www.zaycev.net/download.php?ass=%CB%E8%E3%E0%EB%E0%E9%E7_-_%CE%F1%F2%E0%F2%FC%F1%FF.mp3&id=18674

регулярка будет примерно такая:
Код

http://www.zaycev.net/download.php\?ass=.+&id=\d+

Автор: TrillerMan 10.11.2007, 18:12
ок,счас попробую.спасибо

Автор: TrillerMan 11.11.2007, 12:25
Страница открывается,но регулярка не работает((
Ниже привожу код.
Вообщем нужно получить ссылку о которой выше шёл разговор,но в Label1 пустота.
ЧТо не так делаЮ?
Код

procedure TForm1.Button1Click(Sender: TObject);
 const
  Template = 'http://www.zaycev.net/download.php\?ass=.+&id=\d+';
 begin
  x:=IdHTTP1.Get ('http://www.zaycev.net/pages/186/18674.shtml');
  with TRegExpr.Create do try
     Expression := Template;
     if Exec (x) then begin
       Label1.Caption := Format ('ССылка',
         [Match [2], Match [1], Match [3], Match [4]]);
      end;
    finally Free;
   end;
 end;


Автор: MetalFan 11.11.2007, 12:38
TrillerMan, ты бы хоть  хелп к TRegExpr почитал...
как минимум ошибка в том, что надо брать Match[0], а не подвыражения, которых нет.
возможно гдето ошибка в регулярке.
вот, после замены на нежадный ".+" вроде заработало
Код

http://www.zaycev.net/download.php\?ass=.+?&id=\d+

Автор: TrillerMan 11.11.2007, 12:52
Cделал всё как надо,не работает всё равно.Хелп бы я прочитал бы,но я вообще не понимаю в регекспы (( Приложил архив с исходниками ниже,а вот собственно кусок код.
Код

procedure TForm1.Button1Click(Sender: TObject);
 const
  Template = 'http://www.zaycev.net/download.php\?ass=.+?&id=\d+';
 begin
  x:=IdHTTP1.Get ('http://www.zaycev.net/pages/186/18674.shtml');
  with TRegExpr.Create do try
     Expression := Template;
     if Exec (x) then begin
       Label1.Caption := Format ('ССылка',
         [Match [0]]);
      end;
    finally Free;
   end;
 end;

Автор: MetalFan 11.11.2007, 13:00
Цитата(TrillerMan @  11.11.2007,  12:52 Найти цитируемый пост)
       Label1.Caption := Format ('ССылка',
         [Match [0]]);

и что ты хочешь от этого кода? думать надо прежде, чем копипастить...
все, я больше ничего не скажу. здесь явная ошибка, ищи добрых людей, может подскажут. или Format + F1

Автор: W4FhLF 11.11.2007, 13:05
Выражение работает правильно, но составлено не совсем верно. Вот так будет лучше:


Код

http://www\.zaycev\.net/download\.php\?ass\=.+?\&id\=\d+



Второе, создай нормально объект. 

Код

var
  exp: TRegExpr;
begin
  exp := TRegExpr.Create;
  try
    exp.Expression := 'http://www\.zaycev\.net/download\.php\?ass\=.+?\&id\=\d+';
    exp.Exec('http://www.zaycev.net/download.php?ass=%CB%E8%E3%E0%EB%E0%E9%E7_-_%CE%F1%F2%E0%F2%FC%F1%FF.mp3&id=18674');
    ShowMessage(exp.Match[0]);
  finally
    exp.Free;
  end;


Всё работает. 

Автор: TrillerMan 11.11.2007, 13:35
Спасибо всем за помощь,всё отлично работает smile 

Автор: MetalFan 11.11.2007, 17:37
Цитата(W4FhLF @  11.11.2007,  13:05 Найти цитируемый пост)
составлено не совсем верно

точно! про точки забыл  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)