Home » Tutorials » Object Pascal/RTL » Reguläre Ausdrücke in Delphi

Reguläre Ausdrücke in Delphi

Ersetzen und Splitten

In den vorigen Beispielen haben wir gesehen, wie man mit Hilfe regulärer Ausdrücke in einem Text suchen und finden kann.
Der nächste Schritt ist es, die gefundenen Treffer durch etwas anderes zu ersetzen. Auch das wird von TRegEx unterstützt. Da man einen Treffer womöglich nicht nur durch einen statischen Text ersetzen möchte, sondern durch etwas, das auf den Eigenschaften des Treffers basiert, gibt es mit TMatchEvaluator einen Prozedurentyp, über den man eine Prozedur/Methode erstellen kann, die für die Ersetzung zuständig ist. Als Eingabeparameter hat diese den aktuellen Treffer vom Typ TMatch.
Folgende Methode wandelt den Text jedes Treffers in Großbuchstaben um und hängt die Position im Inputtext an:

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    function MyReplace(const Match: TMatch): string;
  end;

...

function TForm1.MyReplace(const Match: TMatch): string;
begin
  Result := UpperCase(match.Value) + IntToStr(match.Index);
end;

Nun muss diese neue Methode nur noch einer Variablen vom erwähnten Typ TMatchEvaluator zugewiesen und die Replace-Methode von TRegEx aufgerufen werden:

procedure TForm1.Button1Click(Sender: TObject);
var
  myEval: TMatchEvaluator;
begin
  myEval := MyReplace; // MyReplace ist der Name der oben definierten Ersetzungs-Methode
  ShowMessage(TRegEx.Replace(input, regex, myEval));
end;

Die Ausgabe lautet: „DELPHI1 ist ein tolles Werkzeug, um Desktop-Anwendungen zu entwickeln. Ich nutze DELPHI82 XE3 schon längere Zeit.“

Splitten

Zu guter Letzt bietet TRegEx auch eine Methode „Split“, um den Eingabetext anhand eines regulären Ausdrucks in mehrere Teile zu zerteilen.
Folgendes Beispiel zerteilt unseren Beispieleingabetext am Satzende in mehrere Teile. Da das Punkt-Zeichen in regulären Ausdrücken eine besondere Bedeutung hat, muss es mit einem Backslash davor maskiert werden.

regex := '.';

procedure TForm3.Button1Click(Sender: TObject);
var
  list: TArray;
  item: String;
begin
  list := TRegEx.Split(edInput.Text, edRegex.Text);
  for item in list do
  begin
    ShowMessage(item);
  end;
end;

Da der Punkt als Trennzeichen interpretiert wird, ist er nach dem Split in keinem String mehr enthalten. Die Liste an Teiltexten besteht aus drei Elementen: dem ersten Satz bis vor den ersten Punkt, dem zweiten Satz bis vor den zweiten Punkt und einem leeren String aufgrund des Punktes am Ende.