6.1 PHP-Funktionen für reguläre Ausdrücke und triviale Beispiele
Das Zusammenspiel von regulären Ausdrücken und PHP soll an sehr einfachen Beispielen gezeigt werden. Wir konzentrieren uns auf die Verwendung der PHP-Funktionen preg_match(), preg_match_all() und preg_replace().
PHP-Funktionen für Reguläre Ausdrücke | Beschreibung |
---|---|
preg_match() |
Speichert den ersten Eintrag und gibt 1 zurück wenn etwas gefunden wurde. preg_match($suchmuster,$text) |
preg_match_all() |
Speichert alle Strings, die auf das gesuchte Muster passen und gibt die Anzahl der Treffer zurück. preg_match_all($suchmuster,$text,$treffer) |
preg_replace() |
Suchen und Ersetzen von Strings mit einem regulären Ausdruck. preg_replace($suchmuster,$ersetzen,$text) |
Es gibt noch eine Reihe weiterer Funktionen für reguläre Ausdrücke, auf die wir aber nicht weiter eingehen. Hier eine Auswahl daraus: * preg_filter() — Suchen und ersetzen. Funktioniert ähnlich wie preg_replace() * preg_grep() — Liefert alle Elemente, die auf ein Suchmuster passen. Als Eingabe dient ein Array (anstelle eines einfachen Strings). * preg_quote() — Maskiert Zeichen regulärer Ausdrücke, indem ein Backslash vor jedes Zeichen der durchsuchenden Zeichenkette gesetzt wird. Das ist sinnvoll, wenn ein Text Sonderzeichen enthält. * preg_split() — Zerlegt eine Zeichenkette anhand eines regulären Ausdrucks.
Hinweis
Wir verwenden für PHP die PCRE-Befehle (Perl Compatible Regular Expressions). Wer schon in Perl mit regulären Ausdrücken gearbeitet hat, der kann diese so in PHP übernehmen. Weitere Informationen hierzu gibt es unter http://php.net/manual/de/book.pcre.php.
Einfaches Beispiel für preg_match()
Schauen Sie sich diese Beispiele für die Verwendung der regulären Ausdrücke in PHP genau an. Sie werden diese oft brauchen.
Zuerst ein Beispiel für eine einfache Suche mit preg_match() und eine if-Abfrage, ob das Suchmuster in einem Textstring vorkommt.
Beispiel
Zurückgegeben wird ein Array mit einem Element. Die Ausgabe in $treffer lautet: Array([0] => viel
). In der 4. Zeile sehen Sie, dass die PHP-Funktion preg_match()
direkt in der if-Abfrage steht. Also Achtung: die Funktion preg_match()
selbst gibt nur 1 (=Treffer) oder FALSE (=kein Treffer) zurück.
preg_match()
erwartet als Parameter $suchmuster
und $text
. Die Variable $treffer
ist optional. Auch sind bei allen preg-Funktionen weitere Parameter (z.B. für einen Offset) möglich.
Einfaches Beispiel für preg_match_all()
Manchmal möchte man wissen, wie oft etwas vorkommt. Hierzu kann man preg_match_all() gut verwenden.
Zurückgegeben wird ein Array mit allen Treffern. Die Ausgabe in $treffer lautet: Array ([0] => Array([0]=>a [1]=>a))
. Die Anzahl der Vorkommnisse kann gezählt werden.
preg_match_all()
erwartet als Parameter $suchmuster
, $text
und $treffer
. Seit PHP 5.4 ist $treffer
optional. Weitere Parameter (z.B. für einen Offset) sind möglich.
Einfaches Beispiel für preg_replace()
Sehr häufig soll ein Ausdruck durch einen anderen ersetzt werden. Das ist die Aufgabe von preg_replace().
Zurückgegeben wird ein String. Die Ausgabe in $neuerText
lautet: PHP macht mir Spass
.
In der 5. Zeile sehen Sie, dass die PHP-Funktion preg_replace()
anders funktioniert, denn dort wird das Ergebnis in einer Variablen $neuerText
gespeichert.
preg_replace() ist aber noch mächtiger, als in dem trivialen Beispiel angegeben. Denn preg_replace()
findet ohne Limitierung alle Treffer und ersetzt diese, wenn das Limit nicht explizit angegeben wird.
Alle Treffer löschen
Hier suchen wir nach dem Buchstaben a
und löschen diesen, indem wir in $ersetzen
einen leeren String schreiben.
Ausgabe:
PHP mcht viel Spss
Genau zwei Treffer löschen mit $limit = 2
Wenn wir eine feste Anzahl von Treffern ersetzen möchten, dann kann dies in preg_replace()
mit angegeben werden. Wir führen hierfür die Variable $limit
ein.
Ausgabe:
Schnee, Schnee, nichts als Regen
In der 5. Zeile haben wir $limit = 2
gesetzt, sodass nur die ersten beiden Treffer ersetzt wurden. Mit $limit = -1
(Default-Einstellung) werden alle Treffer gefunden und ersetzt.
Hinweis
Auch eine Kurzschreibweise ohne Variablen ist möglich, in der wir die Strings direkt einsetzen:
Reguläre Ausdrücke im Web-Interface prüfen
Es gibt eine Reihe von Webseiten zum Testen regulärer Ausdrücke. Achtung: unterschiedliche Programmiersprachen haben eventuell eine (leicht) unterschiedliche Syntax der regulären Ausdrücke. Wie die externen Tools genau arbeiten ist mir nicht bekannt.
- http://www.regexe.de/
- http://gskinner.com/RegExr/ - Sehr schön, aber nicht PHP-basiert. Also bei komplexen regulären Ausdrücken die Ergebnisse vor der Übernahme in PHP kritisch hinterfragen. Für die hier im Modul verwendeten regulären Ausdrücke sollte es keine Abweichungen geben.