PHP/ REGULÄRE AUSRÜCKE Tutorial: Reguläre AusdrückeIn diesem Tutorial wird erklärt, wie reguläre Ausdrücke aufgebaut sind, was die Metacharaktere (Zeichen mit spezieller Bedeutung) eines Patterns bedeuten, und wie man das ganze in PHP umsetzt. Es werden nur die wichtigsten Teile erklärt, für weiterführende Informationen findet sich am Ende dieses Dokuments eine Linkliste.
1
![]() 1 Reguläre AusdrückeWas sind reguläre Ausdrücke und wofür braucht man sie?Reguläre Ausdrücke sind Muster (Patterns), die auf eine Zeichenkette angewendet werden können, um beispielsweise feststellen zu können, ob die Zeichenkette bestimmten Vorgaben entspricht (nur Zahlen, zwei Wörter, etc.), oder um bestimmte Teile des Textes, die zum Teil variabel sein können, zu ersetzen. In diesem Tutorial wird erklärt, wie reguläre Ausdrücke aufgebaut sind, was die Metacharaktere (Zeichen mit spezieller Bedeutung) eines Patterns bedeuten, und wie man das ganze in PHP umsetzt. Es werden nur die wichtigsten Teile erklärt, für weiterführende Informationen findet sich am Ende dieses Dokuments eine Linkliste. Aufbau eines regulären AusdrucksEin gewöhnliches Pattern besteht aus drei Teilen, deren Aufbau an diesem Beispiel dargestellt werden soll: /pattern/i Die zwei Schrägstriche sind sog. Delimiter, die den Anfang und das Ende des Pattern kennzeichen. Ein Delimiter darf aus jedem beliebigen nicht-alphanumerischen Zeichen außer dem Zeichen "" (umgekehrter Schrägstrich) bestehen, so z.B. ein Ausrufezeichen oder ein Prozentzeichen. Das Pattern an sich ist der Hauptteil, zu welchem wir dann noch kommen werden. Der letzte Teil besteht aus sog. Modifiern. Sie beeinflussen das ganze Pattern - mehr dazu findet sich im übernächsten Abschnitt. Reguläre Ausdrücke in PHPPHP bietet mehrere Funktionen, in denen reguläre Ausdrücke zum Einsatz kommen können. In diesem Dokument sollen nur preg-Funktionen besprochen werden, da sie schneller als ereg-Funktionen sind und die Patterns genauso in Perl und den meisten anderen Anwendungen, die reguläre Ausdrücke unterstützen, benutzt werden können. Diese Funktionen sind ab PHP 3.0.9 verfügbar. Die zwei wichtigsten preg-Funktionen sind:
Modifier
Die Modifier können beliebig kombiniert werden, s und m zusammen machen allerdings wenig Sinn. MetacharaktereMetacharaktere stehen für einen bestimmten Teil der Zeichenkette. Die folgende Aufstellung zeigt deren Bedeutungen.
Soll ein Zeichen nicht als Metacharakter (hierzu zählt auch der gewählte Delimiter), sondern als normales Zeichen aufgefasst werden, so ist diesem Zeichen ein umgekehrter Schrägstrich (Backslash) voranzustellen: Beispiel: /(abc)/ Dieser Ausdruck trifft auf jede Zeichenkette zu, die"(abc)" enthält. QuantifierMit Quantifiern ist es möglich, eine minimale, maximale oder exakte Anzahl für ein oder mehrere Zeichen festzulegen. Wir kein Quantifier angegeben, so wird angenommen, dass das Zeichen genau einmal vorkommen muss. Standard-Quantifier sind:
Standardmäßig versuchen die Quantifier, auf einen so großen Text wie möglich zu passen. Dies kann zu Problemen führen: Angenommen es liegt eine Zeichenkette $str = "[b]text[/b]text[b]text[/b]" vor, und wir möchten daraus "<b>text</b>text<b>text</b>" machen. Versuchen wir es folgendermaßen: $str = preg_replace("[/b]!","<b>text</b>",$str); so erhalten wir als Ergebnis "<b>text[/b]text[b]text</b>" - nicht ganz das, was wir wollten. Um dieses Verhalten abzustellen, setzen wir hinter den Quantifier ein Fragezeichen "?": $str = preg_replace("[/b]!","<b>text</b>",$str); und das gewünschte Ergebnis ist erreicht! Jeder der oben beschriebenen Quantifier kann durch ein angehängtes "?" zu diesem Verhalten bewegt werden, so z.B. {1,4}? oder +?. CharakterklassenEine Auswahl von erlaubten Zeichen kann in eckigen Klammern angegeben werden: /^a[bc]$/ trifft beispielsweise auf "ab" oder "ac" zu. In einer Charakterklasse haben zwei Zeichen eine Sonderbedeutung: Ein vorangestelltes "^" bedeutet in diesem Kontext eine Negierung der angegebenen Zeichen - man kann auch sagen, dass dann nur die komplementären Zeichen gelten. /^a[^bc]$/ trifft also auf alles außer "ab" und "ac" zu. Das zweite Zeichen mit Sonderbedeutung ist der Bindestrich "-". Zwischen zwei Zeichen eingesetzt, gibt er eine Reichweite an. Beispiele hierzu: /^[a-zA-Z]+$/ trifft also auf alle Zeichenketten mit Groß- und Kleinbuchstaben, aber ohne Zahlen zu. /^[a-Z]+$/ bewirkt das gleiche, ist jedoch aufgrund der unterschiedlichen Zeichendisponierung bei verschiedenen Systemen unsicher. BackreferencesBackreferences sind Rückbezüge, sie beziehen sich also auf einen vorangegangenen Teil des Patterns (in runden Klammern) und enthalten deren Inhalt. Es gibt zwei Syntaxes, die neuere davon ist $n, wobei n für die n-te Klammerngruppe steht. Beispiel: !(<b>|<i>)(.*?)(</$1>)! trifft auf "<b>text</b>" und "<i>text</i>" zu, aber nicht auf "<b>text</i>". Am nützlichsten sind Backreferences jedoch bei Ersetzungsoperationen mit preg_replace(): $str = preg_replace("!-anfang-(.*?)-ende-!","<anfang>$1<ende>",$str); Dieses Konstrukt würde also z.B. die Zeichenkette "-anfang-text hier-ende-" durch "<anfang>text hier<ende>" ersetzen. Erweiterte PatternsErweiterte Patterns bestehen aus runden Klammern, einem Fragezeichen am Anfang, einem dem Fragezeichen folgenden Operator o und dem Pattern xxx an sich: (?oxxx) Die nützlichsten hierbei sind:
Anwendungsbeispiele
Dies war nun ein kleiner Ausschnitt aus den Anwendungsmöglichkeiten von regulären Ausdrücken. Es gibt noch viele weitere - dies soll jedoch dem Leser als Übung überlassen werden. Weiterführende Links
|
Über den Autor
Tutorial bewertenHat Ihnen dieses Tutorial gefallen? Dann bewerten Sie es jetzt! Fünf Sterne bedeutet "Sehr gut", ein Stern "Unzureichend". aktuelle Artikel
|