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

Reguläre Ausdrücke in Delphi

Aufbau von regulären Ausdrücken

Um reguläre Ausdrücke verwenden zu können, muss man deren Syntax verstehen. Wir werden uns hier nur einige Dinge ansehen. Die Möglichkeiten sind viel größer und zu komplex für ein Einsteiger-Tutorial. Der Schwerpunkt liegt hier auf der Verwendung in Delphi. Das Erstellen regulärer Ausdrücke unterscheidet sich nicht von anderen Programmiersprachen.

Beginnen wir mit einem Beispiel:

^D[a-z]*i$
Dieser reguläre Ausdruck ist wie folgt zu verstehen:

  • ^ steht für den Beginn des Strings. D.h. der String muss mit einem großen D beginnen (es dürfen keine Zeichen vor stehen), damit der reguläre Ausdruck zutrifft.
  • $ steht für das Ende des Strings, es dürfen also keine Zeichen hinter dem kleinen i kommen.
  • Innerhalb der eckigen Klammern wird eine Zeichengruppe angegeben, in diesem Beispiel sind alle Zeichen von a bis z (in Kleinbuchstaben) erlaubt. Weitere erlaubte Zeichen könnte man einfach ohne Trennzeichen ergänzen. Bei [a-zABC123] wären außer a bis z auch noch die Großbuchstaben A, B und C sowie die Ziffern 1, 2 und 3 erlaubt.
  • Das Sternchen (*) steht für beliebiges Vorkommen des zuvor definierten Wertes. In unserem Beispiel darf also nach dem großen D beliebig oft ein Zeichen aus der Menge a bis z vorkommen.

Welche Eingaben sind damit erlaubt?

  • DelphiXE – Nein, weil der String mit einem kleinen i enden muss
  • Del-phi – Nein, weil zwischen D und i nur Kleinbuchstaben stehen dürfen und keine Bindestriche
  • Delphi – korrekt

Zeichenklassen

Es ist natürlich umständlich und unübersichtlich, wenn man Zeichengruppen wie [a-z] ständig neu schreiben muss. Deshalb gibt es bereits einige vordefinierte:

d Eine Ziffer (0-9)
D Alles, außer einer Ziffer
w Ein Buchstabe, eine Ziffer oder ein Unterstrich
W Alles, das nicht in w enthalten ist
s Leer- und Steuerzeichen (Whitespaces)
S Alles, das nicht in s enthalten ist
. (Punkt) Jedes beliebige Zeichen

Quantoren

Die Angabe eines Ausdrucks steht erst einmal nur für ein einzelnes Vorkommen. Soll der Ausdruck mehrfach erlaubt sein, muss die entsprechende Anzahl angegeben werden. In obigem Beispiel ist das der Stern, der für jede beliebige Anzahl (auch 0-mal) steht. Weitere Quantoren:

? nullmal oder einmal
+ einmal oder öfter
* beliebig oft (auch nullmal)
{n} exakt n-mal
{min,} mindestens min-mal, beliebig oft
{min,max} mindestens min-mal, höchstens max-mal
{0, max} beliebig oft, höchstens max-mal

Folgende Ausdrücke könnte man alternativ zu obigem Beispiel verwenden, wenn das Wort „Delphi“ erlaubt sein soll:

  • ^D[w]+i$ (statt a-z wären hier alle Zeichen erlaubt, aber mindestens eins)
  • ^D[w]{4}i$ (hier müssen exakt vier Zeichen zwischen D und i stehen)
  • ^D[elph]{4}i$ (hier müssen ebenfalls exakt vier Zeichen zwischen D und i stehen und diese müssen aus der Gruppe e, l, p und h stammen; die Reihenfolge ist aber nicht vorgegeben, so dass auch „Dphlei“ passen würde)

Weitere besondere Zeichen

Folgende Zeichen haben in regulären Ausdrücken ebenfalls eine besondere Bedeutung:

^ Textanfang
$ Textende
| Alternative (oder), Beispiel: ^D[e|p]i$ erlaubt „Dei“ und „Dpi“
Maskierungszeichen, wenn z.B. $ wirklich im Text vorkommen und nicht „Textende“ bedeuten soll, wird ein \ vorangestellt.

Das Beschriebene stellt die wichtigsten Möglichkeiten regulärer Ausdrücke dar. Es soll sich dabei nicht um eine vollständige Dokumentation handeln; immerhin wurden schon ganze Bücher über reguläre Ausdrücke geschrieben.
Das Erstellen regulärer Ausdrücke kann recht komplex werden. Deshalb ist es hilfreich zu wissen, dass es im Internet sog. RegEx-Tester gibt – Webseiten, in die man einen regulären Ausdruck eintragen und direkt testen kann, ob er so funktioniert wie gewünscht. Beispiel: www.regextester.com
Mehr zu regulären Ausdrücken gibt es z.B. in der Wikipedia oder Regular-Expressions.info.