![]() |
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 ![]() 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! |
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 |
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 :) |
Re: Noch einmal zu Regulären Ausdrücken in Delphi
Eine sehr gute Komponente gibt es auch bei
![]() ...:cat:... |
Re: Noch einmal zu Regulären Ausdrücken in Delphi
Zitat:
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! |
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 :| |
Re: Noch einmal zu Regulären Ausdrücken in Delphi
Hier also mein Code:
Delphi-Quellcode:
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.
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; 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 |
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: |
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. |
Re: Noch einmal zu Regulären Ausdrücken in Delphi
Zitat:
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 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz