Hauptmenü

Untermenü

PHP/MySQL - Reguläre Ausdrücke

1. Die Abschnitte

2. Das Problem

Zeichenketten, also die mehr oder weniger beliebige Verknüpfung von Buchstaben, Zahlen, Leer- und Sonderzeichen zu einer Einheit, stellen Programmierer immer wieder vor Probleme. Genauer gesagt, wenn man sie überprüfen muss, ohne ihren genauen Inhalt zu kennen. Das klassische Beispiel dafür ist die Validierung einer syntaktisch korrekten E-Mail. Man kennt zwar den grundsätzlichen Aufbau, hat aber keinen blassen Schimmer davon, wie sie aussieht. Oder Kreditkartennummern, auch da gibt es je nach Anbieter ein Schema, allerdings mit unzähligen Kombinationsmöglichkeiten.

3. Die Lösung

... heißt reguläre Ausdrücke. Dabei handelt es sich um so genannte Suchmuster, die einfach gesagt, die Struktur einer Zeichenkette beschreiben. Dabei ist der eigentliche Inhalt egal, Hauptsache das Muster passt. Wer diese Technik in die Programmierung eingeführt hat, kann ich leider nicht sagen. Fakt ist aber, dass man der Sprache Perl und ihrem Erfinder Larry Wall wohl den Hauptanteil des Ruhmes zuteil werden lassen muss.

4. PHP und Reguläre Ausdrücke

In PHP gibt es zwei Möglichkeiten, die ereg- und preg-Variante. Über die Vor- und Nachteile will ich mich jetzt nicht auslassen. Fakt ist aber, dass die preg-Funktionen weitaus mächtiger und schneller sind als der olle ereg-Kram. Und der ist mittlerweile "deprecated", also missbilligt und fliegt bald komplett raus. Also wollen wir uns mal auf die Zukunft konzentrieren und uns auf erstere Variante beschränken.

5. Hinweis

Da ich in diesem Einsteigertutorial nur auf die grundsätzlichen Dinge eingehe, empfehle ich euch als weiterführende Lektüre im PHP-Handbuch das Kapitel Reguläre Ausdrücke.

6. Noch ein Hinweis

Reguläre Ausdrücke stellen selbst erfahrene Programmier immer wieder vor schier unlösbare Aufgaben. Das Problem ist die Komplexität und der hohe Abstraktionsgrad. Viele so genannte Pattern sehen so aus, als ob der Programmierer sich während der Arbeit mal kurz auf der Tastatur abgestützt hat. Beispiel gefällig?


<?php
  $pattern "/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/";
?>

7. Ein Tipp

Reguläre Ausdrücke benötigen Rechenleistung!

Man setzt sie daher nur ein, wenn man sie unbedingt braucht. Um zum Beispiel ein pisseliges <? in ein <?php umzuwandeln, reicht ein str_replace in dem meisten Fällen völlig aus. Oder um das Wort "Telefon" in einem Satz zu finden kann man auch wunderbar mit strpos arbeiten.

8. Literatur

Wer sich wirklich tief in dieses Thema einarbeiten will, der kommt meines Erachtens nach nicht um ein ziemlich dickes Buch herum. Im O'Reilly-Verlag ist zu diesem Thema ein Standardwerk erschienen. Der Autor heißt Jeffrey E.F. Friedl und sein Werk gilt als die Bibel für reguläre Ausdrücke. Da der Wälzer über 500 Seiten hat, könnt ihr erahnen, wie komplex das Thema ist.

9. Das Internet

... ist nach diversen Recherchen meiner Meinung nach nur bedingt tauglich, um an die notwendigen Informationen zu kommen. Da gibt es leider sehr viel Müll, den man mühsam aussortieren muss.

10. Üben, üben, üben

So lernt am Besten und am Schnellsten, mit regulären Ausdrücken umzugehen. Ich selber habe einige Stunden am Rechner verbracht, bevor ich dieses Tutorial verfasst habe. Leider vergisst man solche Dinge sehr schnell wieder. So wie ich. War vor einigen Jahren der Regexp-King in der Firma. Und jetzt habe ich wieder dieselben Probleme wie alle anderen auch. Darum mein Rat an euch, setzt euch mindestens zweimal im Monat ein Regexp-Ziel und hört erst dann auf, wenn ihr es gelöst hat. So lernt ihr dazu und kommt nicht aus der Übung.

weiter zum nächsten Abschnitt