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.

1
2
3
4
5
6
7
8
9
<?php
$text = "PHP macht viel Spaß";
$suchmuster = '/viel/';
if(preg_match ($suchmuster, $text, $treffer)) {
    print_r($treffer);
}else{
    print "Kein Treffer";
}
?>

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.

1
2
3
4
5
6
7
8
9
<?php
$text = "PHP macht viel Spaß";
$suchmuster = '/a/';
if(preg_match_all($suchmuster, $text, $treffer)) {
    print_r($treffer);
}else{
    print "Kein Treffer";
}
?>

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().

1
2
3
4
5
6
7
<?php
$text = "PHP macht viel Spass";
$suchmuster = '/ viel /';
$ersetzen = 'mir';
$neuerText = preg_replace($suchmuster, $ersetzen, $text);
print $neuerText;
?>

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.

1
2
3
4
5
6
7
<?php
$text = "PHP macht viel Spass";
$suchmuster = '/a/';
$ersetzen = '';
$neuerText = preg_replace($suchmuster, $ersetzen, $text);
print $neuerText;
?>

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.

1
2
3
4
5
6
7
8
<?php
$text = "Regen, Regen, nichts als Regen";
$suchmuster = '/Regen/';
$ersetzen = 'Schnee';
$limit = 2;
$neuerText = preg_replace($suchmuster, $ersetzen, $text, $limit);
print $neuerText;
?>

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:

$neuerText = preg_replace("/H/", "M", "Haus<Auto");

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.