Einführung in die Welt der "Regulären Ausdrücke" - RegEx
Vorwort: Bitte achtet darauf, wann ihr auf reguläre Ausdrücke zurückgreift. Je nachdem welche Aufgabe man damit erfüllen möchte gibt es sinnvollere Alternativen. Zwar mag der reguläre Ausdruck als Code schöner aussehen, doch kann es in bestimmten Fällen auch dazu führen, dass die Laufzeit wesentlich länger ist, als es durch eine alternative Weise nötig wäre.
Dieses Tutorial ist lediglich eine Einführung zu regulären Ausdrücken. Am Ende befinden sich weitere Materialien, die dabei helfen schnell ein Gefühl für reguläre Ausdrücke zu erhalten und diese zu überprüfen.
1. Aufbau und Definition:
Ein regulärer Ausdruck ist nach folgendem Muster aufgebaut: Delimiter Suchmuster Delimiter Modifier
Delimiter:
- Grenzt das Suchmuster vom Modifier ab
- kann jedes nicht-alphanumerische Zeichen sein
- standardmäßig wird / gewählt
Suchmuster:
- gibt an wie der eigentliche String aussehen soll
- ist der reguläre Ausdruck
Modifier:
- ist optional
- enthält erweiterte Modifikationen die auf den regulären Ausdruck angewendet werden
- Bsp.: ignorieren von Groß- und Kleinschreibung,..
2. Suchen von einfachen Texten
Suchen von festgelegten Wörtern:
Beim Suchen von festgelegten Wörtern muss lediglich das Wort selbst angegeben werden. In einem einfachen Beispiel würde es folgendermaßen aussehen:
Beispiel:
Gibt Treffer zurück, wenn der String foo enthält.
Suchen von Wörtern die RegEx-Metazeichen enthalten:
Nicht jeder String soll gewöhnliche Zeichen enthalten. In bestimmten Fällen wird man auch auf Zeichen zurückgreifen, die bei RegEx eine bestimmte Aufgabe erfüllen oder einleiten. Im Folgenden ein Beispiel dazu.
Beispiel:
Richtiger RegEx-Ausdruck:
Falscher RegEx-Ausdruck:
Beim * handelt es sich um ein Metazeichen der regulären Ausdrücke. Es dient als Quantifier und wird nicht als normales Zeichen angesehen. Aus diesem Grund muss es, sollte man es in diesem Sinne nutzen wollen durch \ maskiert werden. Erst dann wird es als Literal angesehen.
Folgende Zeichen müssen maskiert werden: ( ) { } [ ] \ | / + ? * . ^ & -
mehr zum Thema Metazeichen..
3. Suchen von komplexeren Texten mithilfe von Metazeichen
An dieser Stelle empfiehlt es sich die diversen Metazeichen der regulären Ausdrücke zu Gemüte geführt zu haben. Im Folgenden werden einige Beispiele gezeigt, wie man mithilfe von Metazeichen und Modifieren diverse Abfragen starten kann.
Verwendung von Modifiern:
Sieht man sich den Aufbau eines regulären Ausdrucks an, so wird gesagt, dass ein Modifier nur am Ende eines Textes stehen darf. Ein einfaches Beispiel dafür wäre:
Hier wird durch [A-Z] gesagt, dass der reguläre Ausdruck lediglich Großbuchstaben enthalten darf. /g legt fest, dass auch alle Treffer gefunden werden.
Würde man nun eine Eingabe abcd tätigen, so werden keine Treffer gefunden. Durch den Modifier kann man dies jedoch beeinflussen.
Auch hier könnte man nun mit derselben Eingabe abcd den regulären Ausdruck überprüfen. Im Gegensatz zur ersten Variante hat man durch /i die Überprüfung der Groß- und Kleinschreibung deaktiviert, sodass man an dieser Stelle 4 Treffer erhalten würde.
Im nächsten Schritt wird die Komplexität etwas erhöht.
Code:
/([A-Z]+)([a-z]+)([A-Z]+)$/
Man sollte hierbei den Ausdruck aufteilen. Am Anfang wird festgelegt, dass eine beliebige Zeichenkette stehen darf. Ein Treffer findet statt wenn mindestens ein Großbuchstabe ([A-Z]+) gefolgt von mindestens einem Kleinbuchstaben ([a-z]+) gefolgt von wieder mindestens einem Großbuchstaben erfolgt und dieser auch darauf endet. Möchte man festlegen, dass es mit dem Ausdruck starten soll, so ist es nötig ein ^ zu verwenden. Soll es darauf enden wird ein $ verwendet.
Treffer könnten daher sein: AbC, AAAbCC, ..
Hier geht es dann zur Überleitung in den Bereich der Inline-Modifier. Sieht man sich erneut den Aufbau der regulären Ausdrucks an, so erscheint es, dass diese Modifier lediglich am Ende des Ausdrucks nach dem Delimiter stehen dürfen. Dem ist jedoch nicht so. Hier zwei Beispiele für Inline-Modifier:
Code:
/^([A-Z]+)(?i:[a-z]+)([A-Z]+)$/
In diesem Fall wird festgelegt, dass für den mittleren Bereich, welcher nur Kleinbuchstaben erlaubt die Groß- und Kleinschreibüberprüfung deaktiviert wird. Dies geschieht über die Eingabe (?i:[a-z]+).
Das bedeutet, dass auch folgende Treffer möglich wären: ABBBCC, AbC,...
Nicht gültig wären Eingaben wie: ABc, aBCC, abcc,..
Neben der Aktivierung eines Modifiers für eine bestimmte Gruppe, kann man es auch von einem bestimmten Punkt aus festlegen.
Code:
/^([A-Z]+)(?i)([a-z]+)([A-Z]+)$/
Hierbei gilt, dass ab (?i) die Überprüfung der Groß- und Kleinschreibung deaktiviert wird. Dementsprechend können folgende Wörter gebildet werden: ABccc , AbCC, Abbbc,..
Möchte man den Inline-Modifier wieder deaktivieren, so wird in diesem Fall ein (?-i) gesetzt.
Code:
/^([A-Z]+)(?i)([a-z]+)(?-i)([A-Z]+)$/
Dementsprechend gelten ab hier wieder folgende Treffer: ABBBCC, AbC,...
4. Weitere Materialien
Informationen zu RegEx-Ausdrücken:
Online-RegEx Überprüfung mit hilfreichen Informationen: