18. April 2024

Reguläre Ausdrücke – Einige Grundlagen

Das Thema reguläre Ausdrücke ist ein sehr weites Feld und bedarf eigentlich einer ausführlichen Einführung in einige Gebiete der Sprachwissenschaften und der Informatik. Hier wird sich allerdings nur auf das Wesentliche konzentriert und die grundlegendsten Konstrukte zur Bildung von regulären Ausdrücken werden vorgestellt.

Dieser Artikel ist der Leitartikel zu unserer Sammlung von regulären Ausdrücken und soll lediglich als Nachschlagewerk für die wichtigsten Konstrukte dienen, die bei alltäglichen Programmieraufgaben anfallen.

Häufige Fehlerquellen

Zunächst eine kleine Zusammenstellung über häufige Fehler, die im Zusammehang mit regulären Ausdrücken auftreten. Sie können diese als eine Art Checklist verwenden.

  • Eine leere Zeichenkette (bzw. die leere Menge) kann unter Umständen auch einem relativ komplexen regulärem Ausdruck genügen.
  • Meta-Zeichen müssen mit einem Backslash ‚\‘ gekennzeichnet werden, wenn sie nicht als Meta-Zeichen dienen sollen, sondern Teil des Zeichenvorrats/Alphabets in einem regulären Ausdruck sein sollen.
  • Groß- und Kleinbuchstaben sind unterschiedliche Zeichen! Wenn man sowohl Groß- als auch Kleinbuchstaben verwenden möchte, muss man beide auch explizit nennen.
  • Achten Sie auf die korrekte Setzung von Leerzeichen bei mehreren Elementen. Wenn Leerzeichen falsch gesetzt sind, kann das zur Folge haben, dass die gewünschten Strings nicht gefunden werden bzw. unnötige/störende Leerzeichen enthalten.

Metazeichen

Die wichtigsten Metazeichen sind:

( ) [ ] { } \ $ ? | . + – * ^

Die Anwendung dieser Metazeichen wird am besten durch Beispiele verdeutlicht, da diese auch teilweise kontextabhängig sind (Reihenfolge der Beispiele entspricht Auflistung):

Runde Klammern ( )

Runde Klammern dienen in regulären Ausdrücken dazu Elemente zu gruppieren. Das ist manchmal nötig um die Eindeutigkeit eines regulären Ausdrucks sicherzustellen. Auf die so entstandenen Teilausdrücke sind die unten vorgestellten Operatoren ebenfalls anwendbar.

Beispiel:

Ja|Nein zu XY
(Ja |Nein )zu XY

Der obere Ausdruck wäre entweder „Ja“ oder „Nein zu XY“, aber niemals „Ja zu XY“. Dies kann nur mit der Klammerung im zweiten Ausdruck erreicht werden.

Eckige Klammern [ ]

Eckige Klammern finden in regulären Ausdrücken Verwendung um eine Zeichenauswahl festzulegen.

Ein Beispiel:

[09]

Dieses Beispiel bedeutet, dass die Zeichen 0 bis 9, also 0 1 2 3 4 5 6 7 8 9 erlaubt sind. Beachten Sie, dass hier die Zeichenauswahl mit dem Metazeichen „-“ verkürzt wird. Folgender Ausdrück wäre nämlich auch möglich:

[0123456789]

Dasselbe ist auch mit Groß- und Kleinbuchstaben möglich. Hier ein Beispiel, mit dem alle Ziffern sowie Klein- und Großbuchstaben aus dem lateinischen Alphabet erlaubt wären:

[09azAz]

Geschweifte Klammern { }

Geschweifte Klammern dienen in regulären Ausdrücken dazu eine Anzahl festzulegen, also wie oft ein bestimmtes Zeichen oder ein erlaubter Zeichenbereich vorkommen darf, oder muss. Folgende Beispiele sollen das verdeutlichen:

Es sollen alle möglichen vierstelligen Ziffernfolgen in einem regulären Ausdruck abgedeckt werden. Die Ziffernfolge soll also genau vier Stellen lang sein. Nicht mehr und nicht weniger. Der reguläre Ausdruck dazu sieht wiefolgt aus:

[09]{4}

Es können allerdings auch Bereiche festgelegt werden, wobei es einige Besonderheiten zu beachten gilt:

[09]{minimal,maximal}
[09]{4,5}
[09]{4,}
[09]{0,5}

Die erste Zeile zeigt die allgemeine Verwendung bei der Festlegung von Grenzen auf, die in der zweiten Zeile so angewendet wird, das alle 4-Stelligen und alle 5-Stelligen Ziffernfolgen dem Ausdruck genügen. In der dritten Zeile ist keine obere Grenze, kein Maximum explizit festgelegt, was bedeutet, dass alle Ziffernfolgen, die mindestens 4 Stellen lang sind dem Ausdruck genügen würden.

In der letzten Zeile versteckt sich eine beliebte Stolperfalle: Auch die leere Zeichenkette würde diesem Ausdruck genügen.

Backslash \

Die Aufgabe eines Backslashes ist die Funktion eines Metazeichens zu deaktivieren. Soll z.B. eine eckige Klammer dem regulären Ausdruck genügen, könnte das folgendermaßen aussehen:

[\]]

Dollar Zeichen $

Das Dollar-Zeichen markiert in regulären Ausdrücken das String- bzw. Zeilenende. Das heißt, dass direkt nach dem Dollar-Zeichen ein Zeilenumbruch („\n“) stehen muss, bzw. das Dollar Zeichen den Umbruch markiert. (Implementierungen teilweise unterschiedlich!).

[05][abcd]{4,5}$

Hier würden alle Zeichenketten dem Ausdruck genügen, die zuerst die Ziffer 0 bis 5 und dann vier oder fünf mal a,b,c oder d enthalten und genau am Zeilen-/Stringende stehen.

Optionale Elemente mit Fragezeichen ?

Das Fragezeichen dient dazu voranstehende Elemente als Optional zu markieren. Wird z.B. nach einem Namen bzw. einer Person gesucht, die einen Doktortitel hat, kann der Ausdruck dafür wiefolgt aussehen:

(Dr. )?Max Mustermann

Sucht man mit diesem Ausdruck in einem Text, so werden sowohl alle Strings mit „Max Mustermann“ als auch alle Strings mit „Dr. Max Mustermann“ gefunden.

Beachten Sie, die korrekte Setzung des Leerzeichens. Es befindet sich noch in der Klammer. Würden Sie es außerhalb setzen, würde der String “ Max Mustermann“ gefunden werden, also ein Leerzeichen am Anfang enthalten.

Alternativen mit Oder |

Eine einfache Veroderung kann in einem Regulären Ausdruck wiefolgt aussehen:

(Herr |Hr. )Max Mustermann

Möglich wäre demnach: „Herr Max Mustermann“ oder „Hr. Max Mustermann“.

Der Punkt als Platzhalter .

Ein Punkt kann in regulären Ausdrücken für einen Platzhalter stehen, der durch ein beliebiges Zeichen repräsentiert werden kann.

Möchte man beispielsweise alle Autokennzeichen herausfiltern, die aus Berlin stammen und mit den Endziffern „60“ enden, könnte der Reguläre Ausdruck dafür wiefolgt aussehen:

B.+60
B(.{1,})60

Bei beiden Ausdrücken würden alle Strings, die mit B anfangen, mindestens ein Zeichen oder eine Ziffer dazwischen haben und auf „60“ enden dem Ausdruck genügen.

Quantifizierung mit +

Das Pluszeichen „+“ kann als Kurzschreibweise für folgenden Ausdruck verwendet werden:

[09]+
[09]{1,}

Der Bindestrich –

Der Bindestrich, wie bereits bei den eckigen Klammern erwähnt, verwendet, um eine Zeichenauswahl kürzer schreiben zu können:

[09]

Quantifizierung mit Stern *

Auch der Stern ist eine Kurzschreibweise für eine Quantifizierung:

[09]*
[09]{0,}

Diesem Ausdruck genügt also auch die leere Zeichenkette bzw. eine Zeichenkette beliebiger Länge, die nur aus Ziffern besteht.

Negation mit Zirkumflex ^

Das Zirkumflex Zeichen „^“ dient dazu Zeichenketten zu negieren, sofern es im Zusammenhang mit eckigen Klammern verwendet wird. Möchte man z.B. ein beliebiges Zeichen zulassen und nur x, y und z (klein und groß) ausschließen, sähe der Ausdruck dafür wiefolgt aus:

[^xzXZ]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert