Direkt zum Inhalt
Bild von CVB      vLIB-Logo      Drehendes E-Mail-Logo
Navigation oben / Hauptnavigation
Impressum

Reguläre Ausdrücke

  • Diese Seite drucken

Reguläre Ausdrücke (englisch: regular expressions, regex) sind beim Arbeiten mit Formularen und Durchsuchen von Texten ein mächtiges Werkzeug. Um die Grundlagen von regulären Ausdrücken zu verstehen, lege ich jedem das Standardwerk selfHTML und vor allem das Kapitel Reguläre Ausdrücke für einzelne Zeichen ans Herz.

Um den Text zu verstehen sind einige Definitionen notwendig:
  • PUNKT = .
  • STERN = *
  • n = beliebig viele bzw. unendlich
Alles andere wird mit dem jeweiligen regulären Ausdruck erklärt.


Beispiel für reguläre Ausdrücke

string = Haus;
anzahl = eregaus, string, array_grep;
echo array_grep0;
// Ausgegeben wird aus

Der Befehl "ereg" sucht Übereinstimmungen mit einem regulären Ausdruck. Unser
/aus/
wird in "Haus" oder "Mausi" gefunden. So wie der Befehl "grep" (unter Linux zum Beispiel) "aus" in einer Datei gefunden hätte, in der das Wort "Haus" steht. Bitte beachtet, dass "ereg" Groß- und Kleinschreibung beachtet; "Haus" ungleich "haus".

"anzahl" liefert die Anzahl des Suchergebnisses zurück. In unserem Fall ist das drei, da "aus" 3 Buchstaben enthält.

anzahl = erega., string, array_grep

Der PUNKT in /a./ ist ein Meta-Zeichen. Er steht nicht für einen wirklichen Punkt, sondern für genau ein beliebiges Zeichen. In unserem Beispiel "au".

anzahl = eregHa.+s, string, array_grep;

Das Plus ist ebenfalls ein Meta-Zeichen, dass sich auf das vorhergehende Zeichen bezieht. /.+/ heißt übersetzt also: Ein beliebiges Zeichen (der PUNKT) das 1 bis n Mal vorkommen darf. Der Ausdruck /Hax+s/ würde auf belieb viele x prüfen.

anzahl = eregHa.?s, string, array_grep;

Auch ? bezieht sich auf das vorhergehende Zeichen. Es steht für 0 oder ein Zeichen. Dieser Ausdruck passt also auf "Haus", "Hans" und "Hase".


Reguläre Ausdrücke für einzeln Zeichen

Ein Wort in der Sprache der regulären Ausdrücke wird Atom genannt. Atome stellen immer genau ein gesuchtes Zeichen dar, beispielsweise "a oder [abc]".

anzahl = erega-z, string, array_grep;

Dieser Ausdruck passt auf jeden String, der einen Kleinbuchstaben enthält. In unserem "Haus" wird "array_grep[0]" mit "a" belegt.

anzahl = ereg0-9, string, array_grep;

Falls im String eine Zahl ist, wird sie über diesen regulären Ausdruck gefunden. In unserem Beispiel ist keine Zahl enthalten, deswegen würde der Array auch leer bleiben.

Praktische Beispiele
Mit Hilfe von Klammerung
/([a-z])/
einzelner Teile eines regulären Ausdrucks könnt Ihr Teilmuster speichern und an späterer Stelle wiederverwenden. Das wird für unser nächstes Beispiel wichtig.

Das soll erstmal als Einführung reichen. Einzelheiten und eine detailiert Anleitung kann im SelfHTML nachgelesen werden.

Wie löst man folgendes Problem? Man hat in einer Textdatei E-Mail Adressen stehen:
Jaeger, Carol <[email protected]>
Nun möchte man entweder den Namen oder die E-Mail Adresse aus dieser Zeile haben. Hier ist es sehr praktisch, dass die E-Mail Adresse in spitzen Klammern steht. Wir werden "eregi_replace" verwenden, damit wir die Teilausdrücke direkt weiterverarbeiten und die Groß- und Kleinschreibung ignorieren können.

Der erste Teilausdruck lautet:
a-z, +

/a-z/ steht für beliebige Buchstaben.
/, / schließt Kommate und Space (Leertaste) mit ein. Space muss mit "" maskiert werden.

Das + sagt aus, dass beliebig viele dieser Atome auftreten können, also sowohl Buchstaben, als auch Kommata, als auch Spaces.



Beispiele folgen noch ...
Powered by Plone

Diese Seite erfüllt die folgenden Standards:

Valid XHTML   Valid CSS