Hallo,
Du ermittelst per LastPos das letzte Vorkommen eines /. In Deinem
HTML kann aber hinter dem letzten / aus der Pfad zum Bild noch ein / für ein schließendes
HTML-Tag vorkommen. Du muss Dir hier eine andere Lösung suchen, da Du unterschiedlich strukturierte
HTML-Seiten zu parsen hast.
Ausgehen von der von Dir geposteten
HTML-Seite, müsste re.match mit diesem regulären Ausdruck
eigentlich
Code:
src=\"\/at\/app_pic\/modules\/right\/Freizeichenton_der_Woche_Alexander%20Rybak-Fairytales.jpg\"
enthalten. Ist das bei Dir ebenfalls so?
Delphi-Quellcode:
if re.Exec(page.Text) then
repeat
idx:=LastPos('/',re.match[1]);
if idx > 0 then filename:=copy(re.Match[1],idx+1,40)
else filename:=re.match[1];
LiBoPicsFoundInPages.Items[i]:=filename;
until not re.ExecNext;
Ist das noch Dein derzeit aktuellen Quellcode? (Wenn nicht, bitte mal die aktuelle Version posten.)
Beim Copy werden von dem gefundenen String ab der letzten Position von / 40 Zeichen kopiert. Im Beispiel ist der Name des Bildes aber deutlich länger als 40 Zeichen, so dass hier zumindest was abgeschnitten wird.
Vorschlag:
copy(re.Match[1],idx+1,40)
ändern in
copy(re.Match[1],idx+1,Length(re.Match[1]))
um alles ab dem letzten / zu kopieren und dann diesen String weiterverarbeiten. Wenn der Aufbau aller Dateien identisch ist, dann könnte es damit funktionieren:
Delphi-Quellcode:
if idx > 0 then begin
filename:=copy(re.Match[1],idx+1,Length(re.Match[1]));
idx := Pos('\',filename);
if idx > 0 then filename := copy(filename,1,idx - 1);
end else filename:=re.match[1];
Mir scheint, dass Du zwei recht unterschiedliche Arten von
HTML-Dateien vorliegen hast, einmal "richtiges"
HTML und einmal in
HTML enthaltenes Javascript. Da die Dateien anscheinend unterschiedliche Dateiendungen haben, solltest Du sie eventuell separat behandeln, um die Komplexität ein bisserl zu reduzieren.