Teil 2: Workshop: Strings in PHP verarbeiten: Regular Expressions
- Workshop: Strings in PHP verarbeiten: Regular Expressions
- Teil 2: Workshop: Strings in PHP verarbeiten: Regular Expressions
- Teil 3: Workshop: Strings in PHP verarbeiten: Regular Expressions
- Teil 4: Workshop: Strings in PHP verarbeiten: Regular Expressions
Nehmen wir an, wir wollen bei einer Menge von Dateien innerhalb eines Verzeichnisses überprüfen, ob sie mit dem Wort "System" beginnen. Was danach im Dateinamen steht, spielt keine Rolle mehr. Der dafür passende Reguläre Ausdruck lautet wie folgt....
Nehmen wir an, wir wollen bei einer Menge von Dateien innerhalb eines Verzeichnisses überprüfen, ob sie mit dem Wort "System" beginnen. Was danach im Dateinamen steht, spielt keine Rolle mehr. Der dafür passende Reguläre Ausdruck lautet wie folgt.
/System.*/
Wie wir bereits kennengelernt haben, steht der Punkt für ein beliebiges Zeichen. Der darauf folgende * gibt an, dass dieses Zeichen null oder beliebig oft vorkommen darf.
Folgende Quantifikatoren sind möglich:
* Beliebig oft oder nullmal + Beliebig oft, aber mindestens einmal ? Einmal oder nullmal {n,m} Mindestens n-mal, maximal m-mal.
Die Quantifikatoren beziehen sich immer auf das davor liegende Zeichen oder wie wir im weiteren Verlauf sehen werden, auf eine Zeichengruppe.
Sonderzeichen, Zeichenklassen
Damit haben wir fast alles, was als Grundwerkzeug für eine erfolgreiche Mustererstellung notwendig ist. Wie in den vorangegangenen Beispielen zu sehen war, gibt es verschiedene Zeichen, die eine wichtige Bedeutung innerhalb der Ausdrücke haben.

Um nach diesen Zeichen innerhalb eines Textes zu suchen beziehungsweise sie in ein Suchmuster aufzunehmen, werden diese durch einen Backslash \ kenntlich gemacht.
Die bisherigen Muster erlauben zwar schon die Überprüfung von Zeichenketten anhand einfacher Ausdrücke. In der Praxis sind aber noch weit flexiblere Prüfungen notwendig. Die Überprüfung, ob ein Text eine gültige deutsche Postleitzahl darstellt, ist ein gutes Beispiel hierfür.
Eine solche Postleitzahl muss fünf Stellen lang sein und darf nur aus Zahlen bestehen, die aber in beliebiger Reihenfolge vorkommen können. Den dazu notwendigen Quantifizierer haben wir bereits kennengelernt. Das folgende Beispiel zeigt, wie bestimmt werden kann, dass der String nur Zahlen beinhalten kann.
/[0-9]{5}/
In den eckigen Klammern kann eine Zeichenbandbreite angegeben werden (in diesem Beispiel von 0 bis 9). Diese Bandbreite ist beliebig und kann neben Ziffern auch Buchstaben enthalten.
Vor- und Nachname:
/[a-zA-ZäöüÄÖÜ]+ [a-zA-ZäöüÄÖÜ]+/
Straße und Hausnummer:
/[a-zA-ZäöüÄÖÜ \.]+ [0-9]+[a-zA-Z]?/
Da diese Definition auf Dauer ganz schön lästig sein kann, existieren einige sogenannte Pseudoklassen, die anstelle der Schreibweise mit den eckigen Klammern eingesetzt werden können. Die Wichtigsten sind:
• \w Erlaubt nur Wortzeichen, also alle alphanummerischen Zeichen • \d Erlaubt nur Ziffern • \D Alle Zeichen außer Ziffern • \s Erlaubt alle Leerzeichen (Spaces, Tabs, Zeilenumbrüche et cetera)
Zusammengebaut
Mit den bislang beschriebenen Mitteln lässt sich bereits eine Menge anstellen. So auch die eingangs beschriebene Überprüfung von E-Mail-Adressen in einem Formular. Der folgende PHP-Quellcode zeigt eine mögliche - zugegebenermaßen etwas zu naive - Implementierung dieser Überprüfung.
<?php
$text = ,info@domain.de';
$muster = ,/^\w+?\@\w+?\.\w{2,4}$/';
if (preg_match($muster, $text)) {
echo ,gültige Adresse';
} ?>
Der gezeigte Reguläre Ausdruck ist nicht für eine wirkliche Validierung einer E-Mail-Adressse geeignet, dafür ist noch deutlich mehr Arbeit erforderlich. Er zeigt aber sehr schön die Möglichkeiten, die in den bisher gezeigten Mitteln stecken.