Impressum  |   RSS  |  Registrieren

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:

FunktionBeschreibung
preg_filterSucht und ersetzt mit regulären Ausdrücken
preg_grepLiefert Array-Elemente, die auf ein Suchmuster passen
preg_replace_callbackSucht und ersetzt einen regulären Ausdruck unter Verwendung eines Callbacks
preg_match_allFührt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch
preg_matchFührt eine Suche mit einem regulären Ausdruck durch
preg_replaceSucht und ersetzt mit regulären Ausdrücken
preg_splitZerlegt eine Zeichenkette anhand eines regulären Ausdrucks
preg_quoteMaskiert 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
halloder 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

<?php
$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].

<?php
$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.

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

Wiederholende Leerzeichen ersetzen

<?php
$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.

<?php
$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

<?php
$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: ,


Weitere Artikel in dieser Kategorie