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: preg, reguläre ausdrücke
Dieser Eintrag wurde am Mittwoch, 16. Februar 2011 um 21:40 erstellt und ist abgelegt unter PHP.
Weitere Artikel in dieser Kategorie