Archiv für Mai 2008

Regulüre Ausdrucke

Donnerstag, 08. Mai 2008

Reguläre Ausdrücke sind sehr gebräuchlich und stellen eine Art Filterkriterium dar, in dem der Ausdruck in Form eines Musters gematched wird.
Soviel die Theorie…
In der Praxis werden die reguläre Ausdrücke sehr oft verwendet, zum Beispiel um Strings zu Filtern oder Rewrite Rules für Apache zu erstellen. Um die reguläre Ausdrücke richtig zu verstehen, muss man sich mit EBNF beschäftigen, ich möchte im diesem Beitrag ein paar Grundlegende Regeln erläutern, damit man die Reguläre Ausdrücke besser verstehen könnte:

| – Pipe-Symbol steht für logisches „oder“.
() – Runde Klammern bedeuten eine Gruppierung.
z.B. (a|b) heißt a oder b.
[] – Die quadratische Klammern definieren einen Bereich von Zeichen, die vorkommen können. Zum Beispiel [0-6] heißt, dass es ein Ziffer von 0 bis 6 vorkommen kann.
[a-z] würde heißen, dass es eine kleine Buchstabe des Alphabets vorkommen kann.
Mann kann auch kombinieren: [a-zA-Z0-9] würde heißen dass es eine beliebige lateinische Buchstabe oder eine beliebige Ziffer vorkommen kann
[^f] – Ein ^-Symbol vor einem Zeichen würde in diesem Fall eine Ausnahme bedeuten, d.h., dass es alles außer f vorkommen kann.
. – Punkt steht für ein beliebiges Zeichen. (Achtung, falls man Punkt matchten möchte, sollte man ihn mit einem Backslash maskieren „\.“)
? – Der Ausdruck mit Fragezeichen ist optional.
Beispiel: (aaa)(abc)? Würde alle Zeichenketten mit dem Ausdruck „aaaabc“ finden, aber auch nur „aaa“.
+ – Der vorhandene Ausdruck kommt mindestens einmal vor, kann aber auch beliebig viele Male vorkommen.
Beispiel: (aaa)+ – Damit lassen sich Zeichenketten „aaa“ finden, aber auch „aaaaaa“ oder „aaaaaaaaa“ usw.
* – Dieser Ausdruck kann beliebig oft vorkommen, darf aber auch wegfallen.
Beispiel [a-z]*
{min,max} – Hiermit gibt man vor, wie oft der Ausdruck mindestens und höchstens vorkommen darf.
Beispiel: [0-9]{1,2} würde heißen, dass eine Ziffer von 0 bis 9 mindestens 1 mal und höchstens 2 mal gefunden werden soll.

Falls man Probleme hat und nicht weiß, wo der Fehler liegt, empfehle ich das Programm The Regex Coach, damit kann man wunderbar Debugging betreiben und die Fehler beseitigen.