PHP Reguläre Ausdrücke
PHP reguläre Ausdrücke ermöglichen die Suche, Validierung, Extraktion und Transformation von Zeichenketten mit PCRE-Syntax und preg_-Funktionen.
Ein regulärer Ausdruck (Regex) ist ein Muster, das eine Menge von Zeichenketten beschreibt. In PHP ermöglichen reguläre Ausdrücke die Suche in Texten, die Validierung von Eingaben, das Extrahieren von Daten und die Transformation von Zeichenketten – mit wesentlich weniger Code als bei manueller zeichenweiser Logik. Dieses Kapitel behandelt die Syntax, die preg_-Funktionen und die nützlichsten fortgeschrittenen Techniken, mit ausführbaren Beispielen für jede davon.
Was sind reguläre Ausdrücke
Ein regulärer Ausdruck ist eine Folge von Zeichen, die ein Such-Muster definiert. Anstatt eine feste Zeichenkette zu suchen, kann ein Muster eine ganze Familie von Zeichenketten beschreiben – „beliebige Ziffer", „ein oder mehrere Buchstaben", „eine E-Mail-ähnliche Zeichenkette" usw. Das macht Regex ideal für:
- Validierung von Benutzereingaben (E-Mails, Telefonnummern, Postleitzahlen).
- Suche nach Teilzeichenketten, die einer Form statt einem genauen Wert entsprechen.
- Extraktion von Daten – Bestellnummern, Datumsangaben oder URLs aus Freitexten herauslesen.
- Ersetzen und Aufteilen von Text anhand eines Musters.
PHP verwendet PCRE (Perl-Compatible Regular Expressions), sodass die Mustersyntax identisch mit Perl, JavaScript und den meisten anderen modernen Sprachen ist.
Wie reguläre Ausdrücke in PHP funktionieren
In PHP werden reguläre Ausdrücke von der preg_-Funktionsfamilie verarbeitet. Jede Funktion nimmt ein Muster als erstes Argument und führt eine andere Operation durch.
Häufige preg_-Funktionen
| Funktion | Beschreibung |
|---|---|
preg_match() | Sucht nach dem ersten Treffer. Gibt 1 bei Übereinstimmung zurück, 0 bei keiner Übereinstimmung, false bei Fehler |
preg_match_all() | Findet alle Treffer. Gibt die Anzahl der gefundenen vollständigen Übereinstimmungen zurück |
preg_replace() | Ersetzt jede Übereinstimmung durch eine Ersatzzeichenkette |
preg_split() | Teilt eine Zeichenkette mithilfe des Musters als Trennzeichen in ein array auf |
preg_quote() | Maskiert Zeichen, die im Muster eine besondere Bedeutung haben |
Ein häufiger Fehler: preg_match() gibt 0 (falsy) bei keiner Übereinstimmung zurück und false bei einem Fehler (z. B. einem fehlerhaften Muster). Verwenden Sie den ===-Operator, wenn Sie diese beiden Fälle unterscheiden müssen.
Die Grundlagen von PHP-regulären Ausdrücken
Ein PHP-Muster ist eine Zeichenkette, bei der der Musterkörper in Begrenzer (üblicherweise /) eingeschlossen ist, optional gefolgt von Modifikatoren:
Syntax für PHP-reguläre Ausdrücke
/pattern/modifiersDabei ist pattern die Zeichenfolge, nach der gesucht werden soll, und modifiers sind optionale Buchstaben, die das Verhalten des Musters ändern. Die am häufigsten verwendeten Modifikatoren in PHP sind:
i: Groß-/Kleinschreibung ignorieren (/php/itrifftPHP,Php,php).m: Mehrzeilenmodus —^und$passen am Anfang/Ende jeder Zeile, nicht nur der gesamten Zeichenkette.s: „Dotall"-Modus —.passt auch auf Zeilenumbrüche.u: Muster und Betreff als UTF-8 behandeln. Verwenden Sie dies, wenn der Text Nicht-ASCII-Zeichen enthalten kann.
Häufige Bausteine für Muster
Innerhalb des Musters selbst erledigen einige Metazeichen den Großteil der Arbeit:
| Token | Bedeutung |
|---|---|
\d \w \s | Eine Ziffer, ein Wortzeichen, ein Leerzeichen |
. | Ein beliebiges einzelnes Zeichen (außer Zeilenumbruch, sofern s nicht gesetzt ist) |
+ * ? | Ein-oder-mehr, null-oder-mehr, null-oder-eins des vorherigen Tokens |
{2,4} | Zwischen 2 und 4 Wiederholungen |
^ $ | Anfang und Ende der Zeichenkette (oder Zeile im m-Modus) |
[abc] | Eine Zeichenklasse – eines von a, b oder c |
(...) | Eine Erfassungsgruppe |
| | Alternation – passt auf das Muster auf einer der beiden Seiten |
PHP-regulärer Ausdruck zum Ersetzen von Text
PHP-reguläre Ausdrücke zur Validierung von Benutzereingaben verwenden
Eine der häufigsten Verwendungen regulärer Ausdrücke in PHP ist die Validierung von Benutzereingaben. Sie können beispielsweise einen regulären Ausdruck verwenden, um sicherzustellen, dass eine vom Benutzer eingegebene E-Mail-Adresse das richtige Format hat. Der folgende Code zeigt, wie das umgesetzt werden kann:
PHP-regulärer Ausdruck, um sicherzustellen, dass eine E-Mail-Adresse das korrekte Format hat
Hinweis: Obwohl dieser Regex für die grundlegende Validierung funktioniert, bietet PHP die eingebaute Funktion filter_var($email, FILTER_VALIDATE_EMAIL) für eine robustere, RFC-konforme E-Mail-Validierung. Für vollständige Formular-Workflows siehe PHP-Formularvalidierung.
Alle Treffer finden
Während preg_match() beim ersten Treffer stoppt, sammelt preg_match_all() jeden Treffer in einem array. Das ist das Werkzeug zum Extrahieren wiederholter Daten, wie z. B. jedes Wort, jede Zahl oder jedes Tag in einer Zeichenkette.
Alle Zahlen aus einer Zeichenkette extrahieren
<?php
$text = "Room 12, floor 3, building 7";
$count = preg_match_all("/\d+/", $text, $matches);
echo $count; // Outputs: 3
print_r($matches[0]); // Outputs: Array ( [0] => 12 [1] => 3 [2] => 7 )
?>Zeichenketten aufteilen
preg_split() zerlegt eine Zeichenkette mithilfe eines Musters als Trennzeichen in ein array. Im Gegensatz zu explode() kann das Trennzeichen variieren – hier teilen wir bei beliebigen Komma- und Leerzeichen-Folgen auf:
<?php
$csv = "apple, banana, cherry";
$fruits = preg_split("/[\s,]+/", $csv);
print_r($fruits);
// Outputs: Array ( [0] => apple [1] => banana [2] => cherry )
?>Fortgeschrittene Techniken für PHP-reguläre Ausdrücke
Sobald die Grundlagen beherrscht werden, ermöglichen diese Techniken das Schreiben ausdrucksstarker, präziser Muster.
Erfassungsgruppen
Klammern (...) erfassen einen Teil einer Übereinstimmung, sodass dieser aus dem $matches-array ausgelesen werden kann. Index 0 enthält die gesamte Übereinstimmung; Index 1 und höher enthalten jeweils die Gruppen.
Benannte Gruppen
(?<name>...) gibt einer Gruppe eine lesbare Bezeichnung, sodass Werte per Name statt per numerischem Index abgerufen werden können – viel übersichtlicher bei Datumsangaben, Preisen und anderen strukturierten Daten.
<?php
$date = "2023-10-01";
preg_match("/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/", $date, $m);
echo $m["year"]; // Outputs: 2023
echo $m["month"]; // Outputs: 10
?>Alternation
Der |-Operator passt auf ein Muster oder ein anderes. Das folgende Beispiel findet das Tier, das zuerst vorkommt:
<?php
preg_match("/cat|dog|bird/", "I love cats", $m);
echo $m[0]; // Outputs: cat
?>Weitere Bausteine
- Nicht-erfassende Gruppen —
(?:...)gruppieren Tokens (um z. B. einen Quantifikator anzuwenden), ohne die Übereinstimmung zu speichern, was das$matches-array übersichtlich hält. - Lookahead / Lookbehind —
(?=...),(?!...),(?<=...),(?<!...)prüfen, was vor oder nach einer Position steht, ohne diese zu konsumieren. - Quantifikatoren —
{n},{n,}und{n,m}passen auf eine genaue Anzahl oder einen Bereich von Wiederholungen, z. B.\d{4}für genau vier Ziffern.
Wenn Sie vom Benutzer bereitgestellten Text wörtlich in einem Muster suchen möchten, übergeben Sie ihn zuerst an preg_quote(), damit Zeichen wie . oder * maskiert und nicht als Metazeichen behandelt werden.
Verwandte Themen
- PHP RegEx (vollständiger Leitfaden) — ein ausführlicherer Durchgang der PCRE-Syntax in PHP.
- PHP Strings — die Nicht-Regex-Zeichenkettenfunktionen, die Regex ergänzt.
- PHP-Formularvalidierung — Muster auf echte Formulareingaben anwenden.
Fazit
PHP-reguläre Ausdrücke sind ein leistungsstarkes Werkzeug, das bei einer Vielzahl von Aufgaben hilft. Ob Sie Benutzereingaben validieren, Texte durchsuchen oder komplexe Zeichenkettenmanipulationen durchführen – reguläre Ausdrücke sind ein unverzichtbarer Teil des Werkzeugkastens eines PHP-Entwicklers.