Suchen
Inside Wiki
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > phpforum.de Wiki > phpforum.de Wiki

PHP Wiki Dieses Wiki sammelt Lösungen, zu Problemen, welche immer wieder im Forum auftauchen.

 
 
Artikel-Optionen Ansicht
  #1  

Standard Reguläre Ausdrücke

 

Inhalte

Definition


Mit Regulären Ausdrücken lassen sich Teile einer Zeichenkette anhand eines Suchmusters aus einer bestehenden Zeichenkette herausfiltern.

Aufbau


Der Aufbau eines Regulären Ausdrucks folgt einem festgelegten Schema:
Code:
Delimiter – Suchmuster – Delimiter – Modifier


Delimiter


Als Delimiter bezeichnet man ein nicht alphanumerisches Zeichen, das den eigentlichen Ausdruck eingrenzt und von den Modifiern trennt. Ein beliebter Delimiter ist z.B. der Slash („/“). Kommt das Delimiterzeichen auch im Suchmuster vor, so muss dieses mittels eines Backslashs („\“) maskiert werden. Um sich diese Arbeit zu ersparen und das Suchmuster übersichtlich zu halten, sollte man einen Delimiter wählen, der nicht im späteren Ausdruck verwendet wird.

Modifier


Die Modifier beeinflussen das Verhalten des kompletten, oder auch nur einzelner Teile des Suchmusters.

ModifierErläuterung
A – Anchored (engl. „verankert“)Der Anfang des Suchmusters muss mit dem Anfang der zu dursuchenden Zeichenkette übereinstimmen.
D – Dollar End OnlyWird das Dollarzeichen („$“) benutzt, so wird dieses als Zeilenumbruch interpretiert. Dieser Modifier verliert seine Bedeutung, wenn der Modifier-m gesetzt ist.
e – Execute (engl. „ausführen“)Der Ausdruck/die Unterausdrücke werden von PHP geparst, bzw. können auch durch andere Funktionen verarbeitet werden.
i – Ignore CaseIm Suchmuster wird nicht zwischen Groß- und Kleinschreibung unterschieden.
m – Multiline (engl. „mehrzeilig“)Falls Zirkumflex („^“) und Dollarzeichen („$“) in ihrer Funktion als Metazeichen benutzt werden, so gelten diese für jede Zeile und nicht für die gesammte Zeichenkette.
s – Dot AllWird der Punkt („.“) als Metazeichen eingesetzt, so trifft dieser auch für Zeilenumbrüche zu.
U – Ungreedy (engl. „nicht gierig“)Der Ausdruck trifft auf die kleinstmögliche Anzahl an Zeichen zu und nicht, wie gewöhnlich, auf die größtmögliche.
x – Extended (engl. „erweitert“)Alle nicht maskierten Leerzeichen („ „), Tabulatoren, Zeilenumbrüche u.ä., innerhalb des Suchmusters (auch in Zeichenklassen) werden ignoriert.

Metazeichen


Die Metazeichen sind Zeichen, die eine besondere Funktion innerhalb des Ausdrucks haben (sofern sie nicht maskiert werden). Zu den Metazeichen zählen auch die Zeichen mit besonderer Bedeutung in Zeichenklassen u.a. und werden in den entsprechenden Kapiteln erläutert.

ZeichenBedeutung
Punkt („.“)Der Punkt steht für jedes beliebige Zeichen, mit Ausnahme des Zeilenumbruchs (lässt sich mithilfe des Modifier-s umgehen).
Der Akzent Zirkumflex („^“)Dieses Zeichen bedeutet, wenn es am Anfang des Ausdrucks steht, dass auch die zu durchsuchende Zeichenkette beginnen muss, wie es das Suchmuster tut. In Zeichenklassen wird dem Zirkumflex noch eine weitere Bedeutung zuteil.
Das Dollarzeichen („$“)Dieses Zeichen steht für das Ende des Ausdrucks.
Die Pipe („|“)Die Pipe ist der Oder-Operator innerhalb von Regulären Ausdrücken.

Quantifier


Die Quantifier legen fest, wie oft sich ein Zeichen oder Unterausdruck, dem sie nachgestellt sind, sich wiederholen darf.

ZeichenBedeutung
Das Fragezeichen („?“)Der Bezugsteil kann, aber muss nicht vorkommen.
Der Stern („*“)Der Bezugsteil muss gar nicht vorkommen, kann sich aber auch beliebig oft wiederholen.
Das Plus („+“)Der Bezugsteil muss mind. ein Mal vorkommen.
Geschweifte Klammern („{„ und „}“)Wird zwischen den geschweiften Klammern eine einzige Zahl notiert, so gibt diese die genaue Anzahl an, die der Bezugsteil vorkommen darf. Werden zwei, durch Kommata getrennte, Zahlen eingesetzt, so steht die erste für die Mindestanzahl und die zweite für die Maximalanzahl an Vorkommen.

Zeichenklassen



Zeichenklassen enthalten Angaben erlaubter oder verbotener Zeichen und werden durch eckige Klammern („[„ und „]“) eingegrenzt. In einer Zeichenklasse können sowohl einzelne Zeichen, als auch Zeichenbereiche notiert werden. Ist das erste Zeichen einer Zeichenklasse der Akzent Zirkumflex („^"), so dürfen die in der Klasse vorhanden Zeichen nicht vorkommen, aber alle anderen. In Zeichenklassen verliert der Punkt („.“) seine Funktion als Universalzeichen und hat den Wert seines Zeichens - einen Punkt. Das Minus („-“) bekommt den Rang eines Metazeichens zugesprochen, auf den im Kapitel „Zeichenbereiche“ näher eingegangen wird und muss, sofern ein Minus als normales Zeichen gewünscht ist mit einem Backslash („/“) maskiert werden.


Zeichenbereiche


Zeichenbereiche festzulegen erspart dem Programmierer die lästige Aufzählung aller erwünschter Zeichen und solche Bereiche lassen sich durch simple „Von-Bis“-Konstruktionen in Zeichenklassen, oder durch vordefinierte Kürzel (auch in Zeichenklassen einsetzbar) darstellen.

Zeichenklassen


Wie bereits angesprochen, lässt sich ein Zeichenbereich innerhalb einer Zeichenklasse durch „Startzeichen-Endzeichen“ definieren, z.B. „a-z“ oder „0-9“. Das Minus („-“) ist in Zeichenklassen also ein Metazeichen, das als „Bis-Operator“ fungiert.

Besondere Zeichen


Zeichenbereiche müssen nicht unbedingt durch Zeichenklassen, sondern können auch durch vordefinierte Zeichen dargestellt werden, die sowohl innerhalb, als auch ausserhalb von Zeichenklassen gültig sind.

NameZeichenZeichenklasseWert
Digit\d[0-9]Alle Zahlen von Null bis Neun.
No Digit\D[^0-9]Alles außer Zahlen von Null bis Neun.
Whitespace\s[\n\r\f\t\v ]Alle unsichtbaren Zeichen (Leerzeichen etc.)
No Whitespace\S[^\n\r\f\t\v ]Alles außer unsichtbaren Zeichen.
Word\w[a-zA-Z0-9_ ]Alle Zeichen von A-Z (groß und klein), sowie Zahlen, Leerzeichen und Unterstrich.
No Word\W[^a-zA-Z0-9_ ]Alles außer „\w“.
Break\b[\s]Alle unsichtbaren Zeichen, sowie Anfang und Ende der Zeichenkette (lassen sich nicht in einer Zeichenklasse darstellen).

Unterausdrücke


Unterausdrücke sind Teilbereiche des Suchmusters, auf die innerhalb des Suchmusters und in dessen Weiterverarbeitung zugegriffen werden kann. Sie werden durch Klammern („(„ und „)“) gekennzeichnet und werden fortlaufend durchnummeriert. Der Zugriff erfolgt über „\1“, was den ersten Unterausdruck aufrufen würde. Das komplette Suchmuster lässt sich über „\0“ aufrufen. Es ist also schon immer ein Unterausdruck gesetzt. Es wird von der öffnenden Klammer an gezählt, was auch bei verschachtelten Unterausdrücken keine Probleme bereitet.

Code:
<span>Hello world in a span tag.</span>
#<(strong|span).*>(.+)</\1>#

\0 = <span>Hello world in a span tag.</span>
\1 = span
\2 = Hello world in a span tag.


Assertions


Bedingungen legen fest, dass sich ein oder mehrere Zeichen (absoluter Länge) vor oder nach dem Notationspunkt der Bedingung im Suchmuster befinden müssen oder auch nicht befinden dürfen. Obwohl Bedingungen in runden Klammern notiert werden, werden sie nicht als Unterausdrücke behandelt und lassen sich demzufolge auch nicht referenzieren.

Lookahead


Die vorausschauende Bedingung gibt an, dass etwas nach der Deklaration im Suchmuster folgen muss oder nicht folgen darf.
Positiv:
Code:
/.+(?=zu ende\.)/


Negativ:
Code:
/.+(?!zu ende\.).+/


Lookbehind


Die zurückschauende Bedingung gibt an, dass etwas vor der Deklaration im Suchmuster vorhanden sein muss oder nicht vorhanden sein darf.
Positiv:
Code:
/(?<=Beginnend bei).+/

Negativ:
Code:
/(?<!Beginnend bei).+/


PHP-Funktionen


PHP stellt einige Funktionen bereit, mit denen sich Reguläre Ausdrücke verarbeiten lassen.
  • preg_ grep
  • preg_ last_ error
  • preg_ match_ all
  • preg_ match
  • preg_ quote
  • preg_ replace_ callback
  • preg_ replace
  • preg_ split

Beispiele


Belibige Zeichenkette (Groß/Kleinschreibung wird nicht berücksichtigt):
Code:
/Irgend ein Text/i


PLZ (5 stellig):
Code:
/^[0-9]{5}$/


Straße und Hausnummer:
Code:
/[a-zA-ZÄäÖöÜü \.]+ [0-9]+[a-zA-Z]?/


Das Suchmuster einer Emailaddresse könnte zum Beispiel so ausschauen:
Code:
/^[^.@](\.{0,1}[^.@])*@[^.@](\.{0,1}[^.@])*((\.[a-z]{2,4}){1,2}
\.museum)$/i



Nützliches


Kodos


Bei Kodos handelt es sich um ein Programm, mit dem man seine Suchmuster in Echtzeit entwickeln und testen kann.

Cheat Sheet


Ein schönes Cheat Sheet von ILoveJackDaniels.com findest du hier.


Weiterführende Links


http://phpforum.de/php/php-faq/static/regexp.html


Erstellt von Helmchen, 05.02.2008 am 00:48
Zuletzt bearbeitet von kekster, 23.12.2008 am 16:41
2 Kommentare , 6182 Betrachtungen

Dieser Text steht unter der GNU-Lizenz für freie Dokumentation


 

Lesezeichen

Artikel-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Reguläre Ausdrücke xbenjamino PHP 12 22.12.2007 15:38
Reguläre Ausdrücke Sirkofler PHP 2 27.01.2005 17:11
reguläre ausdrücke keksi PHP 7 17.11.2004 11:57
reguläre ausdrücke (?) doenermann PHP 9 23.02.2004 00:35
reguläre Ausdrücke?? malibubu Administration 2 22.02.2004 17:18


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:28 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC