AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wie benutze ich regular expressions?

Ein Thema von nimmersattXD · begonnen am 1. Jun 2009 · letzter Beitrag vom 9. Jun 2009
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#41

Re: wie benutze ich regular expressions?

  Alt 5. Jun 2009, 09:47
so mein programm ist jetzt voll schnell *freu*

mir ist aber aufgefallen das durch meinen regulaeren ausdruck die bilder aus den htmlms leider nichts gefiltert werden! Von einer htmlm datei kann ich sicher ohne bedenken den quellcode reinstellen!

Code:






document.write("\n"+
"\n"+
"\n"+
"\n"+
"     \n"+
"\n"+
"     \n"+
"\n"+
"\n"+
"     \n"+
"     <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"summär&#x20ac;\" width=\"100%\">\n"+
"        <tr>\n"+
"           <td valign=\"top\"><a href=\"http:\/\/freizeichentoene.t-mobile.at\/index\" title=\"Alexander Rybak - Fairytales\"><img alt=\"Alexander Rybak - Fairytales\" border=\"0\" src=\"\/at\/app_pic\/modules\/right\/Freizeichenton_der_Woche_Alexander%20Rybak-Fairytales.jpg\" \/><\/a><\/td>\n"+
"        <\/tr>\n"+
"        \n"+
"     <\/table>\n"+
"  \n"+
"\n"+
"\n"+
"\n"+
"\n"+
"\n"+
"\n"+
"\n"+
"\n"+
"\n"+
"");
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#42

Re: wie benutze ich regular expressions?

  Alt 5. Jun 2009, 11:08
Hallo,

versuch es mal mit
Code:
src=[\\]{0,1}".*"
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#43

Re: wie benutze ich regular expressions?

  Alt 5. Jun 2009, 11:14
ok also es werden mehr bilder gefunden, aber werden leider nich in meiner listbox angezeigt, mit deren inhalt ich weiterarbeite
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#44

Re: wie benutze ich regular expressions?

  Alt 5. Jun 2009, 11:49
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
Code:
src=[\\]{0,1}".*"
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 incopy(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.
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#45

Re: wie benutze ich regular expressions?

  Alt 6. Jun 2009, 00:15
Zitat von nahpets:
In Deinem HTML kann aber hinter dem letzten / aus der Pfad zum Bild noch ein / für ein schließendes HTML-Tag vorkommen.
er wendet LastPos doch nur auf den dateinamen (inkl pfad) des bildes an. da dürfte zum schluss kein / mehr kommen.
und der regex bleibt eigentlich auch innerhalb des ersten tag, da sollte </bla> keine rolle spielen.

@nimmersattXD: du wolltest doch NUR image dateien die per [img]...[/img] angegeben sind rausfiltern, oder?
oder wollteste noch links etc auslesen?

wenn der source per js ausgegeben wird (so wie's aussieht) muß er ja nur noch die zus. \ fürs escapen beachten, mehr nicht.
oder übersehe ich da jetzt was?

edit:
Code:
<img .*?src=[\\]??"([^"]*)[\\]??"
sollte eigentlich beide finden, normale img-tags und die mit den escapten " in document.write
mußt dann nur in deiner routine den dateinamen nach \ durchsuchen, denn innerhalb des dateinamens
können (und sind sicherlich) auch zeichen escaped
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#46

Re: wie benutze ich regular expressions?

  Alt 8. Jun 2009, 10:33
so erstmal hier mein aktueller code:


Delphi-Quellcode:
procedure TForm1.BtnSearchSitClick(Sender: TObject);
var direct,filename:string;
    page:TStringList;
    i,j,idx:integer;
    re:TRegExpr;
    such:Boolean;
begin
direct:=Edpaths.Text;
//GetFilesInDirectory(direct,'*.html',LiBoSit.Items,true,true);
GetFilesInDirectory(direct,'*.htmlm',LiBoSit.Items,true,false);
//GetFilesInDirectory(direct,'*.jsp',LiBoSit.Items,true,false);

LbSit.Caption:=(IntToStr(LiBoSit.Count));


//routine zum suchen der Url in den htmls

page:=TStringList.Create;
re:=TRegExpr.Create;

   try
   for i:=0 to LiBoSit.Count-1 do
     begin
     page.LoadFromFile(LiBoSit.Items[i]);
     re.ModifierI:=true;
     re.ModifierG:=false;
     re.ModifierM:=false;
     re.ModifierS:=false;
     re.ModifierX:=false;
     re.Expression:='img .*?src=[\\]??"([^"]*)[\\]??';
     such:=re.Exec(page.Text);
     if such then
       repeat
       idx:=LastPos('/',re.match[1]);
         if idx > 0 then filename:=copy(re.Match[1],idx+1,length(re.Match[1]))
           else filename:=re.match[1];
       LiBoPicsFoundInPages.Items.Add(filename);
       Label12.Caption:=re.Match[1];
       until not re.ExecNext;
       end;
   finally
     page.Free;
     re.Free;
   end;

   LbPicsFoundInPages.Caption:=(IntToStr(LiBoPicsFoundInPages.Count));

end;
bei diesen RegAus hab ich nun das problem das er zwar sucht (das sehe ich an dem scrollbalken der in der listbox erscheint), die listbox an sich aber leider leer bleibt und ich mit ihr nicht weiterarbeiten kann.

das hier ist der code einer htmlm-datei:

Code:

document.write("\n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"     \n"+ 
"\n"+ 
"     \n"+ 
"\n"+ 
"\n"+ 
"     \n"+ 
"     <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"summär&#x20ac;\" width=\"100%\">\n"+ 
"        <tr>\n"+ 
"           <td valign=\"top\"><a href=\"http:\/\/freizeichentoene.t-mobile.at\/index\" title=\"Alexander Rybak - Fairytales\"><img alt=\"Alexander Rybak - Fairytales\" border=\"0\" src=\"\/at\/app_pic\/modules\/right\/Freizeichenton_der_Woche_Alexander%20Rybak-Fairytales.jpg\" \/><\/a><\/td>\n"+ 
"        <\/tr>\n"+ 
"        \n"+ 
"     <\/table>\n"+ 
"  \n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"\n"+ 
"");
aus ihr moechte ich "Freizeichenton_der_Woche_Alexander Rybak-Fairytales.jpg" als beispiel rausfiltern
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#47

Re: wie benutze ich regular expressions?

  Alt 8. Jun 2009, 11:13
copy&paste sollte schon richtig angewendet werden. du hast den regex von mir gar nicht ganz kopiert, da fehlt was!
außerdem muß ModifierG:=true; wie ich auch schon geschrieben hatte. hab den regex jetzt (beim testen)
noch um ne kleinigkeit erweitert, nimm am besten diesen hier:
Code:
<img .*?src=[\\]??"([^"]*?)[\\]??"
(und diesmal ganz kopieren)
damit solltest du die dateinamen bekommen. mußt halt nur html-spezifische sachen noch konvertieren in deinem programm
(%20 für ein leerzeichen etc)
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#48

Re: wie benutze ich regular expressions?

  Alt 8. Jun 2009, 12:03
mmh kann leider nich kopieren, hab hier auf arbeit den rechner hier mit dem ich ins inet gehe, da ist aber leider kein delphi drauf, deswegen hab ich auch meinen leppie hier mit (bin fuer 6 wochen nur zum einsatz hier in london) der kein inet hat ...

is aba acuh nur ne bloede ausrede, richtig abschreiben muss ich ja trotzdem koennen, da haste recht

Delphi-Quellcode:

procedure TForm1.BtnSearchSitClick(Sender: TObject);
var direct,filename,afterspace,beforespace:string;
    page:TStringList;
    i,j,idx:integer;
    re:TRegExpr;
    such:Boolean;
begin
direct:=Edpaths.Text;
GetFilesInDirectory(direct,'*.html',LiBoSit.Items,true,true);
GetFilesInDirectory(direct,'*.htmlm',LiBoSit.Items,true,false);
//GetFilesInDirectory(direct,'*.jsp',LiBoSit.Items,true,false);

LbSit.Caption:=(IntToStr(LiBoSit.Count));


//routine zum suchen der Url in den htmls

page:=TStringList.Create;
re:=TRegExpr.Create;

   try
   for i:=0 to LiBoSit.Count-1 do
     begin
     page.LoadFromFile(LiBoSit.Items[i]);
     re.ModifierI:=true;
     re.ModifierG:=true;
     re.ModifierM:=false;
     re.ModifierS:=false;
     re.ModifierX:=false;
     re.Expression:='<img .*?src=[\\]??"([^"]*?)[\\]??"';
     such:=re.Exec(page.Text);
     if such then
       repeat
       idx:=LastPos('/',re.match[1]);
         if idx > 0 then filename:=copy(re.Match[1],idx+1,length(re.Match[1]))
           else filename:=re.match[1];
         idx:=LastPos('%20',filename);
         if idx > 0 then begin
         afterspace:=copy(filename,idx+3,length(filename));
         beforespace:=copy(filename,0,idx-2);
         filename:=beforespace+' '+afterspace;
         end;

       LiBoPicsFoundInPages.Items.Add(filename);
       until not re.ExecNext;
       end;
   finally
     LiBoPicsFoundInPages.Sorted:=true;
     page.Free;
     re.Free;
   end;

   LbPicsFoundInPages.Caption:=(IntToStr(LiBoPicsFoundInPages.Count));

end;
so mein neuer code!

hab das mit dem %20 so geloest, aba das wahre scheint das noch nichts zu sein
und die jsp-dateien musste ich auch ausklammern, weil es mit denen anscheinend nicht funktioniert!
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
nat

Registriert seit: 10. Nov 2005
216 Beiträge
 
RAD-Studio 2009 Pro
 
#49

Re: wie benutze ich regular expressions?

  Alt 8. Jun 2009, 13:07
was ist denn an den jsp-dateien anders, dass es nicht klappt?
dem regex is es egal, was das für dateien sind, solange die sachen
die er suchen soll in dem format wie bei dem html von dir gepostet
ist. das mit dem %20 könntest du entweder auch wieder über einen
regex lösen, oder schnell eine eigene routine schreiben.
das würd in etwas so ablaufen:

1) nach % suchen
2) wenn gefunden, nächsten 2 zeichen holen
3) wenn TryStrToInt('$'+DieZweiZeichen, Code) = true, dann die 3 zeichen (% auch)
durch Chr(Code) ersetzen
4) mit 1) fortsetzen

mit dem $-zeichen am anfang sagst du der routine, dass es ein hex-wert ist (0..9, A..F)
  Mit Zitat antworten Zitat
Benutzerbild von nimmersattXD
nimmersattXD

Registriert seit: 1. Jun 2009
Ort: Sangerhausen
65 Beiträge
 
Delphi 7 Personal
 
#50

Re: wie benutze ich regular expressions?

  Alt 8. Jun 2009, 15:58
ah ok ich das mit dem %20 jetzt einfach mit stringreplace gemacht!

und soweit ich es mitbekommen hab funzt es einigermaßen mit den jsp, nur manchmal rutschen u.a. auch keine bilder (siehe beispiel) mit in die listbox und auch felder mit keinem inhalt ...

bsp.:

<%=constants.getItemURL()%>?conentid= . . .
Sorry an alle fuer die es schwerfaellt meine texte zu lesen! ich bin im moment in england und hab nur eine englische tastatur, also leider keine umlaute usw.!

http://nimmersatt-xd.mybrute.com
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz