Reguläre Ausdrücke mit PHP
Reguläre Ausdrücke stellen ein mächtiges Mittel zum Vergleichen einer Zeichenkette (String) mit einem Muster aus Zeichenkonstanten sowie Sonderzeichen dar.
In diesem Tutorial werden die PHP Funktionen
preg_match(
$ausdruck,
$string) und
preg_replace(
$ausdruck,
$ersetzungsstring,
$string) behandelt.
Preg_match() durchsucht einen String nach einem Suchmuster und gibt true zurück, falls eine Übereinstimmung besteht.
Preg_replace() sucht nach einem Suchmuster und ersetzt jede Übereinstimmung mit einem Ersetzungsstring.
Grundlegendes
Die regulären Ausdrücke werden in den preg-Funktionen immer zwischen zwei Slahes
'/' geschrieben. Soll in dem Ausdruck nach einem Sonderzeichen gesucht werden, muss dieses erst "escaped" werden, damit es nicht falsch interpretiert wird. Dies geschieht mit einem vorangestellten Backslash
'\'.
|
PHP-Quelltext
|
1
|
preg_match("/\./", $string); // liefert true, falls die Zeichenkette einen Punkt enthält
|
Die einfachste Möglichkeit, reguläre Ausdrücke zu nutzen ist die Suche nach einer Stringkonstante als Teilausdruck:
|
PHP-Quelltext
|
1
|
preg_match("/registrieren/", "Dein PC würde sich registrieren. Wenn er könnte…"); //liefert true
|
Bei diesem Ausdruck wird der String auf der Suche nach
"registrieren" durchlaufen, bis dieser gefunden wurde (true) bzw. bis der String zu Ende ist (false). Das Beispiel gibt true zurück, da
"registrieren" in dem String enthalten ist.
Wenn der Ausdruck am Beginn oder am Ende des Strings gesucht werden soll, werden die Zeichen ^ (für den Beginn des Strings) sowie $ (Das Ende des Strings) eingesetzt.
|
Quellcode
|
1
2
|
^Repräsentiert den Anfang des Strings
$ Repräsentiert das Ende des Strings
|
Soll zb. geprüft werden, ob der String genau der Zeichenkette
"PC-Heaven" entspricht wird dies folgendermaßen geschrieben:
|
PHP-Quelltext
|
1
|
preg_match("/^PC-Heaven$/", $string); //liefert true, falls der String genau der Zeichenkonstante "PC-Heaven" entspricht.
|
Um ein beliebiges Zeichen darzustellen wird der Punkt
'.' verwendet. Optionale Zeichen werden mit einem nachgestellten Fragezeichen
'?' und null bis beliebig viele Vorkommen eines Zeichens werden mit einem
'*' dargestellt. Ein Sonderfall von
'*' ist das Plus-Zeichen
'+'. Bei diesem muss das vorangestellte Zeichen mindestens einmal auftreten.
|
Quellcode
|
1
2
3
4
|
.beliebiges Zeichen
x? optionales 'x'
x* kein oder mehrere 'x'
x+ ein oder mehrere 'x'
|
Folgendes Beispiel liefert true, falls der String mit
"pc-heaven" bzw.
"pcheaven" beginnt und mit
"gut" endet.
|
PHP-Quelltext
|
1
|
Preg_match("/^pc-?heaven.*gut$/" , "pc-heaven find ich gut" ); // liefert true
|
Teilausdrücke speichern
Mithilfe von runden Klammern können in dem regulären Ausdruck Teilausdrücke festgelegt werden, welche in eine über Parameter angegebene Variable geschrieben werden.
Bei der Funktion
preg_match() ist dies ein Array als 3. Parameter. Bei
preg_replace() werden die gefundenen Teilausdrücke an festgelegter Stelle in den Ersetzungsstring geschrieben. (
$1,
$2, ...,
$n)
Beispiele:
|
PHP-Quelltext
|
1
2
|
Preg_match("/PC-Heaven(.*)registrieren/" , "PC-Heaven.de – Dein PC würde sich registrieren…blablabla" , $array); // in $array wird die Teilzeichenkette ".de – Dein PC würde sich " gespeichert.
Preg_replace("/(m.+p)/", "n$1p", "miep mop möp miep"); //Gibt "niep nop nöp niep" zurück
|
Auswahlen mithilfe von eckigen Klammern Mithilfe von eckigen Klamern
"[ ]" werden Auswahlen an möglichen Zeichen festgelegt. Die einzelnen Zeichen werden aufeinander folgend geschrieben. Bereiche werden mit einem Bindestrich definiert.
Ein
'^' verneint die Auswahl
|
Quellcode
|
1
2
3
4
5
|
/[aA]/ Trifft zu, wenn ein großes oder ein kleines a gefunden wird
/[a-z]/ Trifft zu, wenn ein Kleinbuchstabe von a bis z gefunden wird
/[a-zA-Z]/ Trifft zu, wenn ein Groß- oder Kleinbuchstabe gefunden wird
/[0-9]/ Trifft zu, wenn eine Ziffer gefunden wird
/[^0-9]/ Trifft zu, wenn ein beliebiges Zeichen, ausser einer Ziffer gefunden wird
|
Alternative Ausdrücke Alternative Ausdrücke werden mithilfe von
'|' festgelegt.
|
PHP-Quelltext
|
1
|
preg_match("Miep|Möp", "Ähh… Möp?"); //liefert true
|
(C) 2007-2008 PC-Heaven.DE.
Angeboten unter Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported lizenz