![]() | Upline: Infos & Dokus
Administration
Linux
Linux manpages
Regul�re Ausdr�ckeDie regul�ren Ausdr�cke finden an verschiedenenen Stellen Verwendung. So kennt sie der Unix-Administrator vorrangig vom Kommandozeilentool grep, der Programmierer von (�hnlich zu grep arbeitenden) Suchbefehlen und der Webprogrammierer z.B. von mod_rewrite. Die folgende Beschreibung zur Verwendung von regul�ren Ausdr�cken stammt aus der Linux-manpage man grep. Ich habe diese vor allem deswegen abgetrennt, weil man diese "Bedienungsanleitung" eben nicht nur f�r grep verwenden kann und die zugeh�rige manpage doch erdr�ckend gro� war ;) Nachfolgend kommt ein unter der GPL stehender Auszug aus der Manpage zum Befehl grep. Regul�re Ausdr�ckeUnter einem regul�ren Ausdruck versteht man ein Muster, das eine bestimmte Menge von Zeichenketten beschreibt. Regul�re Ausdr�cke werden ganz �hnlich aufgebaut wie arithmetische Ausdr�cke, indem man sie mit Hilfe verschiedener Operatoren aus kleineren Ausdr�cken zusammensetzt.Grep versteht zwei verschiedene Klassen regul�rer Ausdr�cke: "gew�hnliche" und "erweiterte". Eine Unterscheidung, die f�r GNU grep keine Rolle spielt, da beide Varianten gleich m�chtig sind. In anderen grep-Implementierungen steht mit gew�hnlichen regul�ren Ausdr�cken jedoch nur ein eingeschr�nkter Funktionsumfang zur Verf�gung. Die folgende Beschreibung bezieht sich auf erweiterte regul�re Ausdr�cke; die Unterschiede zu gew�hnlichen regul�ren Ausdr�cken sind im Anschluss daran zusammengefasst. Allgemeing�ltigesGrundlegendster Baustein sind die regul�ren Ausdr�cke, die auf ein einzelnes Zeichen passen. Die meisten Zeichen, speziell alle Buchstaben und Ziffern, sind zugleich regul�re Ausdr�cke, die auf sich selbst passen. Alle Metazeichen, die eine besondere Bedeutung besitzen, k�nnen durch einen vorausgehenden R�ckstrich gesch�tzt werden.Eine Liste von Zeichen, die durch [ und ] eingeschlossen ist, passt auf ein beliebiges Zeichen daraus. Beginnt die Liste mit dem Symbol ^, so kehrt sich die Bedeutung um; sie passt auf alle Zeichen, die nicht in der Liste enthalten sind. Beispielsweise passt der regul�re Ausdruck [0123456789] auf eine beliebige einzelne Ziffer. Ein ganzer Bereich von Zeichen kann angegeben werden durch das erste und letzte Zeichen daraus, verbunden durch einen Bindestrich. Schlie�lich gibt es noch eine Reihe vordefinierter Klassen von Zeichen, im einzelnen: [:alnum:] (Buchstaben und Ziffern), [:alpha:] (Buchstaben), [:cntrl:] (Steuerzeichen), [:digit:] (Ziffern), [:graph:] (graphische Zeichen, das hei�t [:alnum:] und [:punct:]), [:lower:] (Kleinbuchstaben), [:print:] (druckbare Zeichen), [:punct:] (Satzzeichen), [:space:] (Leerraum), [:upper:] (Gro�buchstaben) und [:xdigit:] (Ziffern des Hexadezimalsystems). So bedeutet beispielsweise [[:alnum:]] f�r gew�hnlich dasselbe wie [0-9A-Za-z], jedoch h�ngt die zweite Form ab von der POSIX-L�ndereinstellung und ASCII-Kodierung der Zeichen, w�hrend die erste Form davon unabh�ngig ist. (Man beachte, dass die eckigen Klammern Teil des symbolischen Namens der einzelnen Klassen sind. Zus�tzlich dazu m�ssen noch die eckigen Klammern angegeben werden, die eine Liste von Zeichen begrenzen.) Die meisten Metazeichen verlieren innerhalb einer Zeichenkette ihre besondere Bedeutung. Um ein ] selbst zu beschreiben, muss es an erster Stelle der Kette gesetzt werden. Soll ^ als gew�hnliches Zeichen auftreten, darf es nicht an erster Stelle stehen. Das Zeichen - selbst muss an letzter Stelle der Kette auftauchen. Der Punkt . passt auf jedes beliebige, einzelne Zeichen. Das Symbol \w ist ein Synonym f�r [[:alnum:]], \W ein Synonym f�r [^[:alnum]]. Das Dach ^ und das Dollarzeichen $ sind Sonderzeichen, die auf die leere Zeichenkette am Anfang beziehungsweise Ende einer Zeile passen. Ganz �hnlich passen die Symbole \< und \> auf die leere Zeichenkette am Anfang beziehungsweise Ende eines Wortes. Das Symbol \b passt auf die leere Zeichenkette an einem Wortrand; \B bezeichnet das Gegenteil davon und passt auf die leere Zeichenkette, falls die sich nicht an einem Wortrand befindet. Ein regul�rer Ausdruck kann gefolgt werden von einem oder mehreren Wiederholungsoperatoren:
Sind zwei regul�re Ausdr�ck durch den Infix-Operator | verbunden, so passt der gesamte regul�re Ausdruck auf jede Zeichenkette, die auf mindestens einen der beiden Teilausdr�cke passt. Wiederholungsoperatoren besitzen h�here Priorit�t als eine Aneinanderreihung. Am niedrigsten ist die Priorit�t der Alternative. Einzelne Teilausdr�cke k�nnen in Klammern gesetzt werden, um diese Regeln explizit abzu�ndern. Die R�ckw�rtsreferenz \n - wobei n f�r eine einzelne Ziffer steht -, passt auf die Zeichenkette, die wiederum auf den vorhergehenden, eingeklammerten Teilausdruck Nummer n des regul�ren Ausdrucks gepasst hat. In gew�hnlichen regul�ren Ausdr�cken besitzen die Metazeichen ?, +, {, }, |, ( und ) keine besondere Bedeutung. Statt dessen k�nnen die mit einem R�ckstrich gesch�tzten Versionen \?, \+, \{, \}, \|, \( und \) verwendet werden. Eigenheiten bei grepDas Metazeichen { wurde im urspr�nglichen egrep nicht unterst�tzt. Andere Implementierungen unterst�tzen statt dessen \{, so dass portable Skripte { in egrep-Mustern generell vermeiden sollten. Als Alternative kann [{] verwendet werden, um das Zeichen { selbst zu beschreiben.GNU egrep versucht, das urspr�ngliche Verhalten zu unterst�tzen indem es annimmt, dass { keine besondere Bedeutung besitzt, falls es eine ung�ltige Intervallbeschreibung einleiten w�rde. So sucht beispielsweise das Kommando egrep '{1' nach der zwei Zeichen langen Zeichenkette {1, statt einen fehlerhaften regul�ren Ausdruck zu melden. Dieses Verhalten ist in POSIX.2 als Erweiterung erlaubt. Portable Skripte sollten darauf jedoch nicht vertrauen. |