Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Noch einmal zu Regulären Ausdrücken in Delphi (https://www.delphipraxis.net/19806-noch-einmal-zu-regulaeren-ausdruecken-delphi.html)

ichhabefertig 9. Apr 2004 01:06


Noch einmal zu Regulären Ausdrücken in Delphi
 
Hallo,

ich bräuchte eine Unit/Kompo, mit der ich Reguläre Ausdrücke in Delphi nutzen kann. Ich habe schon im Netz und auch in der DP gesucht, aber nur die TRegExpr Unit http://regexpstudio.com/ gefunden. Das Problem bei dieser Unit ist jedoch, dass sie bei größeren Texten extrem viel Stackspeicher (10 MB+) braucht und dann auch noch instabil läuft. Sie eignet sich nur für kleinere Texte.

Ich brauche REs um HTML Seiten nach bestimmten Teilen zu durchsuchen, und da diese naurgemäß etwas größer sind, taugt TRegExpr nicht wirklich dazu. ich könnte natürlich auch selbst eine Funktion schreiben, die die entsprechenden Teile such, aber RE sind so praktisch ;)

Kennt jemand eine Unit oder Komponenten, mit der das Ganze problemlos geht? Die zu durchsuchenden Strings sind die Quelletexte, die ich direkt aus einer TWebBrowser Kompo ziehe.

Danke!

Christian Seehase 9. Apr 2004 01:13

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Moin ichhabefertig,

ich mag mich irren, aber ich denke, bei den Turbo Power Komponenten ist auch eine für Reguläre Ausdrücke dabei.
Ob die sparsamer mit den Stack umgeht, und stabiler läuft vermag ich aber nicht zu sagen.

Zu finden sind die bei sourceforge.net

MarcusB 9. Apr 2004 08:55

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Hi!

Ich verwende für eben denselben Zweck auch die TRegExpr, habe allerdings hier kein Problem mit der Stabilität.
Und ich quäle sie richtig ;)
Meine Applikation parst ca 20.000 HTML Seiten, die teilweise weit über 1.000 Zeilen HTML-Code enthalten.
Wobei die Ausdrücke dabei jetzt nicht soo furchtbar anspruchsvoll sind (hauptsächlich Tags entfernen/ersetzen oder Bereiche extrahieren).

Achso, ich benutze V0.952 :)

sakura 9. Apr 2004 08:56

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Eine sehr gute Komponente gibt es auch bei http://www.zeitungsjunge.de/delphi/pcre/index.htm Ich glaube, diese kostet um die 40 Euro für die Sourcen, ohne ist diese wohl kostenfrei...

...:cat:...

ichhabefertig 9. Apr 2004 13:31

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Zitat:

Zitat von MarcusB
Hi!

Ich verwende für eben denselben Zweck auch die TRegExpr, habe allerdings hier kein Problem mit der Stabilität.
Und ich quäle sie richtig ;)
Meine Applikation parst ca 20.000 HTML Seiten, die teilweise weit über 1.000 Zeilen HTML-Code enthalten.
Wobei die Ausdrücke dabei jetzt nicht soo furchtbar anspruchsvoll sind (hauptsächlich Tags entfernen/ersetzen oder Bereiche extrahieren).

Achso, ich benutze V0.952 :)

Welche Methoden nutzt Du? Die Exec Methode, oder auch andere? Ich habe die Unit so wie in den Beispielen eingebunden, als in einen try...finally Block,
aber bei großen Seiten gibt's immer einen StackOverflow, nur wenn ich den Stack auf 10 MB setze klappt das erst wirklich. Ich habe es bei einer Seite mit
ca. 3000 Zeilen HTML Code getestet, und da reichten nicht einmal 10 MB Stack, als ich das mal mit 50MB Stack getestet habe, hat die Unit nur noch Müll produziert.

Vielleicht machst Du ja was anders, was mir helfen könnte... :-D

Danke!

MarcusB 9. Apr 2004 15:14

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Hm, ja ich nutze hauptsächlich Exec-Methode um mir verschiedene Matches in Records zu speichern.
Für kleine Ersetzungen nutze ich ReplaceRegExpr-Funktion.

Ich habe auch garnichts weiter eingestellt, es lief eigentlich auf Anhieb.

Poste doch mal ein bischen Code, vielleicht sieht man ja was.
Vielleicht verträgts sich ja auch mit deiner Delphiversion nicht :|

ichhabefertig 10. Apr 2004 00:22

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Hier also mein Code:

Delphi-Quellcode:
procedure TMainWindow.StartClick(Sender: TObject);
var
   r : TRegExpr;
   vTemp : variant;
   s string;

begin
   vTemp := WebBrowser.Document;
   if Webbrowser.LocationURL <> '' then
    s := vTemp.Body.OuterHTML;
   
   r := TRegExpr.Create;
 
    try
      r.Expression := 'ed2k://\|file\|(.)*\|[0-9]*\|[A-Fa-f0-9]*\|';                                                        
      if r.Exec (s) then
         REPEAT
           LinkList.Items.Add(r.Match[0])
         UNTIL not r.ExecNext;
      finally r.Free;
    end;

end;
Das ist im Prinzip genau wie in der Doku zu TRegExpr, nur dass mein String eben sehr lang ist, dadurch dass es eine Website ist. Ich weiß nicht, ob es vielleicht an der Art liegt, wie ich den Quelltext aus der Seite bekomme, meine RE läuft auf jeden Fall, das habe ich in dem Testtool von TRegExpr mit einem kurzen Text getestet. Was ich vorhabe, ist einfach die ed2k Links aus der Seite zu ziehen, die RE ist ja auch recht simpel. Meine Delphi Version ist D7 Personal. TRegExr hat v0.952.

Mir ist klar, dass das rekursive Parsen von großen Texten viel Speicher erfordert, aber diese Mengen scheinen mir etwas übertrieben.
Vielleicht hast Du ja eine Idee...

Danke

MarcusB 10. Apr 2004 12:02

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Hm, sorry, da bin ich mit meinem Latein auch am Ende.
Ich benutze das Konstrukt in ganz ähnlicher Weise, nur dass ich den HTML-Quellcode mit den Indykomponenten hole (einfaches GET) statt TWebBrowser.
Was ich allerdings mache, ist vor dem eigentlichen Rexp den Code von Zeilenumbrüchen und Tabs zu befreien.

Schon komisch. :gruebel:

Robert Marquardt 10. Apr 2004 13:50

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Die Jedi Code Library enthaelt auch einen Parser fuer regulaere Ausdruecke.
Ist allerdings ein bischen bei den Unicode-Sachen versteckt.

ichhabefertig 10. Apr 2004 16:07

Re: Noch einmal zu Regulären Ausdrücken in Delphi
 
Zitat:

Zitat von Robert Marquardt
Die Jedi Code Library enthaelt auch einen Parser fuer regulaere Ausdruecke.
Ist allerdings ein bischen bei den Unicode-Sachen versteckt.

Hallo,

ich habe mir die JCL mal installierrt, aber ich habe nicht den blassesten Schimmer wie ich die Funktion für REs nutzen kann. Immerhin habe ich herausgefunden, dass sie in den Unicode Komponenten steckt und wohl TURESearch heißt. Allerdings schweigt sich die Hilfe aus, wie man das Ding ans Laufen bekommen soll, und Beispiele habe ich auch keine gefunden. Wenn Du zufällig weißt, wie das funktioniert, wäre ich Dir sehr dankbar, wenn Du ein kurzes Codebeispiel posten könntest.

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr.
Seite 1 von 2  1 2      

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