Impressum  |   RSS  |  Forum

tsql

PHP Reguläre Ausdrücke, REGEX oder PREG

Reguläre Ausdrücke sind für viele ein rotes Tuch. In diesem Tipp habe ich daher einige Regex gesammelt. In PHP stehen mehrere Funktionen zur Verfügung, die mit regulären Ausdrücken “gefüttert” werden können. Hier eine kleine Übersicht:

Funktion Beschreibung
preg_filter Sucht und ersetzt mit regulären Ausdrücken
preg_grep Liefert Array-Elemente, die auf ein Suchmuster passen
preg_replace_callback Sucht und ersetzt einen regulären Ausdruck unter Verwendung eines Callbacks
preg_match_all Führt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch
preg_match Führt eine Suche mit einem regulären Ausdruck durch
preg_replace Sucht und ersetzt mit regulären Ausdrücken
preg_split Zerlegt eine Zeichenkette anhand eines regulären Ausdrucks
preg_quote Maskiert Zeichen regulärer Ausdrücke

Als nächsten sehen wir einige einfache reguläre Ausdrücke und deren Bedeutung. Die Muster werden immer von einem Begrenzungszeichen (Delimiter) eingeschlossen. Bei der Auswahl des Delimiters ist darauf zu achten, dass dieses Zeichen nicht innerhalb des Musters vorkommt.
Eine kleine Übersicht über Suchmuster:

Regulärer Ausdruck (Pattern) Sucht nach ..
[a-z] einzelner Kleinbuchstabe
[A-Z] einzelner Großbuchstabe
hallo der String “hallo” wird gesucht
[a-z]+ ein oder mehrere Kleinbuchstaben
[g-z] ein einzelner Kleinbuchstabe zwischen “g” und “z”
[abc] die Kleinbuchstaben “a”, “b” und “c”
[a-zA-Z] ein einzelner Buchstabe
[^a-z] Sucht nach einem beliebigen Zeichen, welches kein Kleinbuchstabe ist.
[0-9] eine einzelne Zahl
[0-4a-d]+ jede Zahl zwischen “0” und “4” und jeden Kleinbuchstaben zwischen “a” und “d”
(hallo|welt) die Wörter “hallo” und “welt”
[a-z]{3,5} mindestens drei und maximal fünf Kleinbuchstaben zwischen “a” und “z”

Und jetzt einige Praxisbeispiel:

Den Inhalt der H1 Überschrift einer Webseite ermitteln

$html = "<html><head></head><body><h1>PHP REGEX</h1><h2>Beispiel</h2></body></html>";
preg_match('~<h1>(.+?)</h1>~is', $html, $matches);
 
echo $matches[1];

Den Inhalt aller Überschrift einer Webseite ermitteln

Der Inhalt der Überschriften befindet sich in $matches[2].

$html = "<html><head></head><body><h1>PHP REGEX</h1><h2>Beispiel</h2></body></html>";
preg_match_all('~<h([1-6])>(.+?)</h\1>~is', $html, $matches);
 
var_dump($matches)

Telefonnummer prüfen

Hier wird nur geprüft ob es sich um eine Zahlenfolge handelt. Ein Plus vor der Telefonnummer ist optional.

$nummer = "+4937512345678";
if(preg_match('/^[+]?[0-9]+$/', $nummer)){
	echo "korrekt!";
} else {
	echo "nicht korrekt!";
}

Wiederholende Leerzeichen ersetzen

$text = "PHP REGEX         Test Text.";
$text = preg_replace("/[ ]{2,}/", " ", $text);
 
echo $text;

IP Adresse prüfen

Eine IP Adresse besteht aus vier Blöcken, welche jeweils mit einem Punkt voneinander getrennt sind. Jeder einzelne Block kann im Bereich von 0 – 255 liegen. Mal abgesehen von einigen speziellen Adressen, welche ich nicht berücksichtigt habe, prüft folgendes Regex eine IP Adresse auf Gültigkeit. Spezielle Adresse sind z.B. Broadcast, Zeroconf, Anycast oder Multicast.

$ip = "192.168.12.203";
if(preg_match('/^(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/', $ip)){
	echo "korrekt!";
} else {
	echo "nicht korrekt!";
}

Datumsangaben aus ein Text filtern

$text = "Was war noch gleich am 24.12.2010 und was am 1.1.99";  
preg_match_all('/([012]?[0-9]|3[01])\.(0?[0-9]|1[0-2])\.(([12][0-9])?[0-9][0-9])/',$text, $matches);
var_dump($matches[0]);

Tags: ,