PHP – Reguläre Ausdrücke
Wie eingangs bereits gesagt, sind reguläre Ausdrücke sehr nützlich und zeitsparend
(vor allem im Zusammenhang mit Zeichenketten). Sie haben allerdings die merkwürdige
Eigenart, im Prinzip leicht zu verstehen, aber in der Praxis des Programmierens etwas bis
ziemlich verzwickt zu sein. Wir können in dieser Einführung nur die Spitze des Eisberges
abdecken und euch den Rat mit auf den Weg zu geben, etwas tiefer in die Einsatzmöglichkeiten
der regulären Ausdrücke einzusteigen, sofern wir zukünftig mit PHP programmieren möchten oder
müssen.
Wir können uns reguläre Ausdrücke als ein System sich entsprechender Muster vorstellen.
Im Prinzip leisten die Funktionen für reguläre Ausdrücke folgendes: Man kann mit ihrer Hilfe
vordefinierte Muster mit Text-(Teil-)Zeichenketten abgleichen, um entweder Übereinstimmungen
zu finden oder eben nicht. Sofern gewünscht, können wir Muster oder Zeichenketten bei gefundenen Übereinstimmungen zwischen dem Muster und der (Teil-) Zeichenkette dann auch ersetzen lassen.
Das Verfahren ist folgendermaßen: Man schreibt zunächst das Muster, dann verwendet man eine der
Funktionen und wendet das Muster auf einen Text (bzw. eine Zeichenkette) an.
Im Wesentlichen kennt PHP zwei Funktionen zum Vergleichen von Mustern und Funktionen und
zum Ersetzen von übereinstimmendem Text durch einen anderen Text.
Wir beginnen damit, ein Muster zu definieren und eine Übereinstimmung zu suchen.
Muster definieren
Bevor wir die Funktion der regulären Ausdrücke verwenden können, müssen wir Muster
definieren. Die einzusetzende Funktion benutzt dieses Muster dann für den Vergleich.
Um Muster zu definieren, gebrauchen wir bestimmte Symbole/Zeichen, die gruppiert
( und u.U. zu Klassen zusammengesetzt) werden. Die Kombination von Symbolen,
Gruppen (und Klassen) bildet das Muster.
Symbole/Zeichen
Der gebräuchlichste Typ bei der Definition von Mustern ist das einfache, wortwörtlich zu
nehmende Zeichen. Wenn wir beispielsweise als Muster a verwenden, wird auch nur mit
dem Buchstaben a eine Übereinstimmung gefunden. Diese Definition reicht in manchen
Situationen aus, aber leistungsstärker wird der Einsatz von regulären Ausdrücken, wenn
wir spezielle Symbole verwenden, die jeweils eine eigene Bedeutung jenseits ihrer “wortwörtlichen“
haben. Der Unterschied zwischen den einfachen Zeichen( also a stimmt nur mit a überein) und
den speziellen Symbolen ( auch als Metazeichen bezeichnet) ist der, dass Metazeichen
weiterreichendere Übereinstimmungen finden – z.B. entspricht der Punkt (.), der ein solches
Zeichen ist, jedem einzelnen Buchstaben ( “.“ gleich a, b, c, d, etc.) – bzw. nach bestimmten
Wiederholungen eines Zeichens suchen.
Die abgebildete Tabelle listet diese Zeichen und ihre Bedeutung auf (Symbole mit der geschweiften Klammer werden auch als Grenzen bezeichnet, sie legen damit fest, wie oft ein Zeichen oder Zeichenbereich gesucht wird).
Zeichen |
Übereinstimmung |
. |
Jeder beliebige Buchstabe |
^a |
Stimmt überein mit einem String, der mit dem Zeichen beginnt, das nach dem “Dach” steht |
a$ |
Stimmt überein mit einem String, derm it dem Zeichen endet, das vor dem Dollarzeichen steht |
a+ |
Stimmt überein mit einem String, der mehrfach, mindestens aber einmal auftritt |
a? |
Stimmt überein mit einem String, der höchstens einmal auftritt |
a* |
Stimmt überein mit einem String, der beliebig häufig auftreten kann- auch keinmal |
\n |
Stimmt mit einer neuen Zeile überein |
a(2) |
Stimmt überein mit einem String, der zweimal auftritt |
a(1,) |
Stimmt überein mit einem String, der mindestens einmal auftritt |
a(1,3) |
Stimmt überein mit einem String, der mindestens einmal und höchstens dreimal auftritt |
[0-9] |
Stimmt überein mit irgendeiner Ziffer zwischen 0-9 |
Tabelle 3.6: Metazeichen der regulären Ausdrücke
Lassen wir uns dies anhand einiger konkreter Beispiele verdeutlichen.
Das Zeichen f+ findet seine Entsprechung mit allen Zeichenbereichen, die mindestens
ein f (oder aber mehr) enthalten, f+ als Übereinstimmung gefunden werden fisch, affe, schifffahrt,
ffff etc.
Das Zeichen b{2,3}passt zu einer Zeichenkette, die b mindestens zweimal, höchstens dreimal enthält
. Es werden also gefunden : ebbe oder blubbbad, aber nicht bbbb oder abc.
Die Kombination des Punktes . ( steht dafür, dass ein beliebiger Buchstabe vorausgesetzt wird)
mit dem Zeichen + ist ein Muster für einen beliebigen Buchstaben, und davon muss es mindestens
einen geben. Insofern wird .+ als Zeichen häufig eingesetzt, denn es entspricht als Muster (mindestens)
einem Buchstaben. Findet sich ein Match, würde die Prüfung also true zurückgeben.
Gruppen
Eine Gruppe besteht aus den Zeichen, wenn sie zusammengefasst in Klammern geschrieben werden.
Eine einfache Gruppe wäre (abc), wobei eine Gruppierung hier überflüssig ist, da abc das gleiche Resultat erzeugt: Es passt zur Zeichenkette abc. Interessanter ist die Gruppierung in Kombinationen mit der geschweiften Klammer. Schauen wir noch einmal in die obige Tabelle: a{2} passt zu aa, d.h. der
Buchstabe a tritt zweimal auf. Wenn wir (abc){2} schreiben, findet sich bei abcabc eine Übereinstimmung.
Deutlicher wird der Unterschied bei folgendem Beispiel eines gruppierten Musters:
Das Muster schiff+ findet eine Übereinstimmung, wenn schiff gefolgt wird von (mindestens) einem weiteren f. (schiff)+ hingegen entspricht nur einer Zeichenkette, die schiff und (mindestens) noch einmal schiff enthält.
Funktionen der regulären Ausdrücke
Zwei vordefinierte Funktionen suchen Übereinstimmungen mit festgelegten Mustern.
Die eine ist ereg( ) und die andere eregi( ) . Der Unterschied zwischen beiden ist ganz einfach:
Ereg unterscheidet zwischen Groß- und Kleinschreibung und eregi nicht.
Beide Funktionen geben true zurück, wenn die Übereinstimmung zwischen Muster und Zeichenkette gefunden wird, und ansonsten false. Ein Einsatz der Funktion(en) kann folgendermaßen aussehen:
ereg(“definiertes Muster“, “zu vergleichende zeichenkette“);
Geschickter ist es, das Muster einer Variablen zuzuweisen:
$muster = “ definiertes Muster“;
$string = “zu vergleichende Zeichenkette“;
ereg($muster, $string);
Vergleichen und Ersetzen
Während diese Funktion ereg( ) und eregi( ) beispielsweise sehr wirksam einsetzbar sind,
um die Gültigkeit bestimmter Eingaben (z.B. in einem Formularfeld) zu testen, ist es in
anderen Fällen wünschenswert, Eingaben zu verwandeln. Dann kommen die Funktionen
ereg_replace( ) oder eregi_replace( )
ins Spiel. Wie eingangs erwähnt, demonstrieren wir den konkreten Einsatz regulärer Ausdrücke erst im letzten Kapitel des Buches, da wir euch an dieser Stelle damit vermutlich überfordern würden. Im Kapitel Tipps und Tricks finden wir dann zwei Beispiele für die Verwendung regulärer Ausdrücke.
Kleiner Hinweis: Wir bieten auch ein Pagrenkservice an. <<Keine Angst anmelden kostet NIX!>>
RANKING CHARTS
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20
|