Regelrechte Ausdrücke
In letzter Zeit bin ich wieder in Lernlaune. Und da ich außerdem mal lesen gelernt habe und es ja jetzt schade wäre, so eine Ausbildung nicht zu nutzen, habe ich mir ein paar Büchern geholt.
Meine letzte Anschaffung war ein Buch über Ausdrücke. Damit, dachte ich mir so, beeindrucke ich dann meinen Rechner und beleidige ein paar Passanten. Dummerweise habe ich mir das Buch in der Computerabteilung der Buchhandlung ausgesucht. Abgesehen davon, dass die EDV-Abteilung zu klein war (ist sie irgendwie immer…) hatte das den Nebeneffekt, dass ich jetzt nicht fluchen, sondern Zeichenketten beschreiben kann.
h3. Probleme und Lösungen
Man sagt über reguläre Ausdrücke (regex), dass sie einem auf den ersten Blick wie die optimale Lösung erscheinen, später aber leicht zu einem eigenständigen Problem heranwachsen können.
Nachdem ich mir die Kurzreferenz durchgelesen habe, habe ich den gleichen Eindruck. Gerade fortgeschrittene Beispiele sind so komplex, dass man schnell den Überblick verliert.
Dabei ist es anfangs ganz leicht: Bei der Überprüfung von Formulareingaben weiß ich, dass die Eingaben einem bestimmten Muster folgen sollten. Telefonnummern sehen doch immer gleich aus, oder? Also versucht man, mithilfe einer regex Telefonnummern zu beschreiben. Wenig später ist man dann soweit, einfach alle Zahlen und einige Sonderzeichen zuzulassen und gibt weitere Strukturmaßnahmen auf. Benutzereingaben können enfach sehr unterschiedlich sein.
Das ist dann der Punkt, an dem man sich wieder auf konventionelle Ausdrücke zurückzieht.
Anders ist es, wenn man z. B. eine e-mail-Adresse auf Gültigkeit prüfen möchte. Da die mail-Adresse von vorneherein einem festen Schema folgt, kann man dieses auch recht genau prüfen. Man muss einfach nur die Regeln, die gelten, als regex ausdrücken und darauf prüfen.
Anfangs habe ich nur auf das vorhandensein von @ geprüft, später kamen dann noch Beschreibungen für die Zeichen davor und danach usw usf. Irgendwann habe ich dann im Internet nach anderen regexen für diesen Zweck gesucht und mein Suchergebnis dann noch ein wenig angepasst.
Das eingangs erwähnte Buch bietet zwar nur eine Syntaxreferenz, was aber für die praktische Arbeit durchaus ausreichen kann. Wenn man weiß, was man erreichen möchte (z. B. eine mail-Adresse überprüfen), dann ist „Reguläre Ausdrücke – kurz & gut“ aus dem O’Reilly-Verlag eine gute Wahl.
Mit ein wenig Vorwissen, das man zum Beispiel durch die Anwendung von „mod_rewrite“:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html sammeln kann, ist es eine angenehme Hilfestellung.
Nur fluchen lernt man durch das Buch nicht. Verdammt.
h3. Codebeispiele
Nur Ziffern und einige Sonderzeichen, die in Telefonnummern üblicherweise zu finden sind, alles in beliebiger Anzahl.
$regex = '{[- 0-9()/+\.]*}';
Beispiel-Regex für eine e-mail-Adresse.
$regex = '/^'; $regex .= '([A-Za-z0-9](([\w.-][^._-]*){0,61})[A-Za-z0-9])@([A-Za-z0-9]([A-Za-z0-9-]{0,61})?[A-Za-z0-9]\.)+([A-Za-z]{2,6})$/';
[edit – 20051231-1502] e-mail-regex angepasst (mein Textile-Plugin hat sie zerstört). Bitte auch Kommentare beachten.
In PHP ist u. a. die Funktion „@preg_match@“:http://www.php.net/preg_match für einfach Vergleiche zuständig. In JavaScript haben String-Objekte @search@- und @replace@-Methoden, die mit regex arbeiten.
Diese PHP-Codebeispiele können gerne weiterverwendet werden, natürlich ohne Garantie auf Erfolg oder Gewährleistung.
-
Jeena Paradies
-
Boris