Reguläre Ausdrücke, welche Unit?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Reguläre Ausdrücke, welche Unit?

Beitrag von Uli »

Hi,
ich habe ein paar Fragen zu Regulären Ausdrücken.
Nach langem stöbern im Netz bin ich auf folgende drei Units gestossen
RegExpr, RegExpr2 und SynRegExpr.
Hier gleich die erste Frage, wie ist der Status der drei Pakete (stabiel oder nicht)?
Und gleich die nächste Frage, warum ist die Web Seite http://RegExpStudio.com
von Andrey V. Sorokin (SynRegExpr) nicht mehr erreichbar?
Ich habe mir die drei Units einmal angeschaut, RegExpr wurde bei Lazarus/FreePascal
mitgeliefert und ist nicht so umfangreich wie die beiden anderen.
Für meine Zwecke würde das aber reichen.
Leider ist dann da aber ein Problem aufgetaucht.
Das Programm wirft einen Fehler beim Beenden (also in der Zeile "end.").

Das Programm

Code: Alles auswählen

program RegTest;
uses regexpr;
var r             : tregexprengine;
    index, len    : longint;
    initok, posok : boolean;
begin
   initok := GenerateRegExprEngine('[0-9]{2,}',[],r);
   if not initok then begin
     writeln('Init Fehler');
   end else begin
     posok := RegExprPos(r,'BAZAZA12ZAZQDABCD',index,len);
     if not posok then writeln('Pos Fehler');
   end;
   DestroyRegExprEngine(r);
   writeln('Index: ', index, ', Len: ', len);
   readln;
end.


Ausgabe

Index: 6, Len: 2

Fehler

Code: Alles auswählen

An unhandled exception occurred at $0040907E :
Exception object An unhandled exception occurred at $00402295 :
EAccessViolation :
  $00402295
  $00406C63
  $004072D4
  $00407340
  $004121C9
  $00407E77
  $0040907E

Wenn ich "{2,}" oder "DestroyRegExprEngine(r)" weglasse, kommt keine Fehlermeldung.
Was mache ich da falsch???
Zuletzt geändert von monta am Mo 21. Sep 2009, 15:54, insgesamt 1-mal geändert.
Grund: Codetags gesetzt, sieht schöner aus.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Reguläre Ausdrücke, welche Unit?

Beitrag von Scotty »

Keine Ahnung, was GenerateRegExprEngine() macht. Das Folgende funktioniert bei mir:

Code: Alles auswählen

uses regexpr;
var r : TRegExprEngine;
try
  r:=TRegExprEngine.Create(<Pattern>);
  x:=0; y:=0;
  if r.MatchString(<Text>, x, y) then;
finally
  r.Free;
end;

Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Re: Reguläre Ausdrücke, welche Unit?

Beitrag von Uli »

Hi Scotty,
danke für Deine Antwort.
Kannst Du es bitte einmal mit <Pattern> = '[0-9]{2,}' probieren?

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Reguläre Ausdrücke, welche Unit?

Beitrag von Scotty »

RunError 204 für '[A-B]{2,}'.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Reguläre Ausdrücke, welche Unit?

Beitrag von Targion »

Würde dir diese Unit reichen? Ich nutze sie selbst in einem Projekt, funktioniert problemlos für meine (recht bescheidenen) Zwecke im Listaller Projekt.\\
Diese Unit wird von dir oben schon erwähnt. Die änderungen, die ich daran gemacht habe sind minimal, es ist also fast die originale Unit.

Uli
Beiträge: 24
Registriert: Mi 2. Sep 2009, 18:49

Re: Reguläre Ausdrücke, welche Unit?

Beitrag von Uli »

Ok, habe jetzt mal die original SynRegExpr.pas genommen und die funktioniert super.
Bleibt die Frage ob sie auch unter Linux funktioniert.
Lars aka L505 (RegExpr2 Autor) schreibt:
"Modified to work as a generic regular expression unit for freepascal users.
This is different from Florian's Regular Expression unit included with FPC.
This one originally came from Andrey V. Sorokin for Delphi and has been ported
to freepascal for use with Linux and Windows. As far as I could tell, the
current version offered at Andrey's website wouldn't work with Linux, but this
version here does work with Linux and Win32 for freepascal."

Ist das so wie Lars schreibt???

Antworten