Also erstmal:
Es handelt sich hierbei noch nicht um einen funktionierenden Code!
Der Code wird nur für Delphi 2009 und neuer entwickelt
und er landet dann vermutlich irgendwann mal in der OpenSource-Abteilung.
Für ein Projekt hatte ich ein paar "Extrawünsche" und versuchte diese mit vorhandenen RegEx-Funktionen/Klassen umzusetzen, welches nicht bei allen Punkten so richtig klappen wollte.
z.B. siehe
http://www.delphipraxis.net/internal...t.php?t=173434
Nun ja, wegen einiger anderer Probleme hatte ich dann einige Codeteile nochmals neu machen oder entfernen "müssen",
so daß es jetzt wieder etwas leerer aussieht, als es mal der Stand war.
z.B.
http://www.delphipraxis.net/internal...t.php?t=173678
Aktuell existiert praktisch nur der Anfang des Parsers und die interne Struktur des "Patterns", sowie des Results.
Der Rückgabewert steht je nach Funktion als String-Array, StringList oder in einer änlichen Form, wie es in PHP der Fall ist, zur Verfügung (also wenn es dann mal läuft).
Aktuell gibt es auch nur eine reine
Unicode-Schnittstelle (wobei es für den Suchtext und eventuell auch das Pattern mal
Ansi geben soll).
Sooooooo, warum ich das jetzt hier schreibe ist,
ich möchte schon frühzeitig Probleme erkannt haben, bevor dann nochmal "viel" geändert werden muß.
Darum:
Hat jemand an der Schnittstelle in der RegEx.pas was auszusetzen?
Und dann hab ich gerade mal versucht die unterstützte Syntax irgendwie zusammenzustellen (siehe RegEx.txt).
Alles ab dem ersten ********** kann ignoriert werden und die Verteilung der
Unicode/
Ansi-Zeichenklassen ist noch nicht entgültig.
Sieht da jemand einen "Fehler" oder etwas Fehlendes in meiner RegExpr-Syntax?
Die RegEx.txt besser in der Delphi-
IDE öffnen, da ich mir aktuell den Text über ein paar Unicodezeichen formatiert hab, welche z.B. im Notepad nicht gut unterscheidbar sind.
Ansonsten kann ich nur noch erwähnen, daß der Code komplett in Pascal geschrieben ist/wird und demnach keine externen Voraussetzungen hat (nur noch mein
DynCharSet wird noch als Zusatz benötigt)
Das Suchmuster (Pattern) wird in einem binären Baum zerlegt und etwas optimiert, um dann schneller/einfacher suchen und vergleichen zu können.
Mein aktueller Testcode ist auch noch recht übersichtlich
(er hat ja auch noch nicht viel zu machen).
Delphi-Quellcode:
Program Project1;
{$APPTYPE CONSOLE}
Uses SysUtils, RegEx, Dialogs;
Var RE: TRegEx;
Begin
Try
RE := TRegEx.Create;
RE.Expression := '
#(abc.[a-z])#i';
WriteLn(RE.Expression);
WriteLn(RE.ExprAssemble);
RE.Free;
If TRegEx.Match('
(abc.[a-z])', '
xyz')
Then
WriteLn('
TRUE');
ReadLn;
Except
On E:
Exception do Begin
WriteLn(E.ClassName, '
: ', E.
Message);
WriteLn('
wait 30 seconds ...');
Sleep(30000);
End;
End;
End.