![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Есть у меня такая ф-ция для парсинга. Она использует VBScript_RegExp_55_TLB.
Код:
function TForm1.Parse(page, pattern: string): string; var Reg: TRegExp; mc: MatchCollection; m: Match; sm: SubMatches; i:Integer; s,r:string; begin Reg := TRegExp.Create(Self); try //Reg.Pattern := 'name="s" value="(.*)"'; s:=page; Reg.Pattern:=pattern; Reg.IgnoreCase:=true; Reg.Global:=true; Reg.Multiline:=true; mc:=Reg.Execute(s) as MatchCollection; for I := 0 to mc.Count - 1 do begin //ShowMessage(inttostr(mc.Count)); m:=mc[i] as Match; sm:=m.SubMatches as SubMatches; //Вроде тут нужно что-то изменить //ShowMessage(VarToStr(sm[i])); r:=trim(VarToStr(sm[0])); Result:=r; end; finally m:=nil; sm:=nil; mc:=nil; Reg.Free; end; end; Используется очень просто: Код:
main:=Parse(html,'<title>(.*)</title>'); Проблема в том, что она ищет лишь одно значение. У меня задача - получить урлы ВСЕХ картинки из небольшого куска html кода. Подскажите, как заставить её отдавать массив ссылок на картинки (<img src="(.*)") Либо возможно есть альтернативное готовое решение по парсингу картинок? |
#2
|
||||
|
||||
![]() TStringList тебя спасёт.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
![]() Цитата:
Код:
function TForm17.MParse(page, pattern: string): TstringList; var Reg: TRegExp; mc: MatchCollection; m: Match; sm: SubMatches; i:Integer; s:string; results:TstringList; begin Reg := TRegExp.Create(Self); results := TStringList.Create; try //Reg.Pattern := 'name="s" value="(.*)"'; s:=page; Reg.Pattern:=pattern; Reg.IgnoreCase:=true; Reg.Global:=true; Reg.Multiline:=true; mc:=Reg.Execute(s) as MatchCollection; for I := 0 to mc.Count - 1 do begin m:=mc[i] as Match; sm:=m.SubMatches as SubMatches; ShowMessage(VarToStr(sm[i])); results.Add(sm[i]); Result:=results; end; finally m:=nil; sm:=nil; mc:=nil; Reg.Free; results.Free; end; end; Последний раз редактировалось MrDiG, 30.09.2011 в 16:10. |
#4
|
||||
|
||||
![]() Ну, почти. Так у тебя утечка памяти будет, если ты не будешь результат очищать где-нибудь. Лучше TStringList создавать в вызывающем коде, после чего удалять там же. Ну и передавать в процедуру параметром.
А, хотя у тебя и этот код не будет работать. Ты же удаляешь StringList в конце функции, и программа использовать его уже не сможет. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 30.09.2011 в 17:19. |
#5
|
|||
|
|||
![]() Цитата:
Извиняюсь, но сильно туплю. Так? Сама ф-ция: Код:
function TForm1.MParse(page, pattern: string; results:TstringList): TstringList; var Reg: TRegExp; mc: MatchCollection; m: Match; sm: SubMatches; i:Integer; s:string; begin Reg := TRegExp.Create(Self); try //Reg.Pattern := 'name="s" value="(.*)"'; s:=page; Reg.Pattern:=pattern; Reg.IgnoreCase:=true; Reg.Global:=true; Reg.Multiline:=true; mc:=Reg.Execute(s) as MatchCollection; for I := 0 to mc.Count - 1 do begin m:=mc[i] as Match; sm:=m.SubMatches as SubMatches; results.Add(VarToStr(sm[i])); Result:=results; end; finally m:=nil; sm:=nil; mc:=nil; Reg.Free; end; end; Вызов: Код:
procedure TForm1.Button1Click(Sender: TObject); var html:String; images:TStringList; i:integer; results:TstringList; begin html:=idHTTP1.Get('http://url.com'); results := TStringList.Create; images:=MParse(html,'"<img src="(.*)"',results); for i := 0 to images.Count-1 do begin ShowMessage(images[i]); end; end; |