AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Noch einmal zu Regulären Ausdrücken in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Noch einmal zu Regulären Ausdrücken in Delphi

Ein Thema von ichhabefertig · begonnen am 9. Apr 2004 · letzter Beitrag vom 10. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
ichhabefertig

Registriert seit: 8. Jul 2003
51 Beiträge
 
#1

Noch einmal zu Regulären Ausdrücken in Delphi

  Alt 9. Apr 2004, 01:06
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!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 9. Apr 2004, 01:13
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#3

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

  Alt 9. Apr 2004, 08:55
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 9. Apr 2004, 08:56
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...

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
ichhabefertig

Registriert seit: 8. Jul 2003
51 Beiträge
 
#5

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

  Alt 9. Apr 2004, 13:31
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...

Danke!
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#6

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

  Alt 9. Apr 2004, 15:14
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
  Mit Zitat antworten Zitat
ichhabefertig

Registriert seit: 8. Jul 2003
51 Beiträge
 
#7

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

  Alt 10. Apr 2004, 00:22
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
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#8

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

  Alt 10. Apr 2004, 12:02
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.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

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

  Alt 10. Apr 2004, 13:50
Die Jedi Code Library enthaelt auch einen Parser fuer regulaere Ausdruecke.
Ist allerdings ein bischen bei den Unicode-Sachen versteckt.
  Mit Zitat antworten Zitat
ichhabefertig

Registriert seit: 8. Jul 2003
51 Beiträge
 
#10

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

  Alt 10. Apr 2004, 16:07
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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:47 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