regex(7) Miscellaneous Information Manual regex(7) BEZEICHNUNG regex - Regulare Ausdrucke gemass POSIX.2 BESCHREIBUNG Regulare Ausdrucke (>>RA<<), wie sie in POSIX.2 definiert sind, gibt es in zwei Arten: moderne RA (ungefahr die von egrep(1); POSIX.2 nennt sie >>erweiterte<< RA) und veraltete RA (ungefahr die von ed(1); gemass POSIX.2 >>einfache<< RA). Veraltete RA existieren hauptsachlich zur Ruckwartskompatibilitat in einigen alten Programmen; sie werden am Ende beschrieben. POSIX.2 lasst einige Aspekte der RA-Syntax und -Semantik offen; >><*><< markiert Entscheidungen zu diesen Aspekten, die nicht vollstandig portabel zu anderen POSIX.2-Implementierungen sein konnen. Ein (moderner) RA sind einer<*> oder mehrere<*> Zweige, getrennt durch >>|<<. Er stimmt mit allem uberein, das mit einem der Zweige ubereinstimmt. Ein Zweig sind eine<*> oder mehrere aneinandergehangte Stucke. Die Ubereinstimmung erfolgt fur das erste, gefolgt von der Ubereinstimmung fur das zweite und so weiter. Ein Stuck ist ein Atom, moglicherweise gefolgt von einem einzelnen<*> >>*<<, >>+<<, >>?<< oder einer Beschrankung. Ein Atom, auf das ein >>*<< folgt, stimmt mit einer Sequenz von 0 oder mehr Ubereinstimmungen mit diesem Atom uberein. Ein Atom, auf das ein >>+<< folgt, stimmt mit einer Sequenz von 1 oder mehr Ubereinstimmungen mit diesem Atom uberein. Ein Atom, auf das ein >>?<< folgt, stimmt mit einer Sequenz von 0 oder 1 Ubereinstimmungen mit diesem Atom uberein. Eine Beschrankung ist >>{<< gefolgt von einer vorzeichenlosen Ganzzahl in Dezimaldarstellung, moglicherweise gefolgt von >>,<<, moglicherweise gefolgt von einer weiteren vorzeichenlosen Ganzzahl in Dezimaldarstellung, immer gefolgt von >>}<<. Die ganzen Zahlen mussen zwischen 0 und RE_DUP_MAX (255<*>) einschliesslich liegen und falls es davon zwei gibt, darf die erste nicht grosser als die zweite sein. Ein Atom, auf das eine Beschrankung folgt, die eine Ganzzahl i und kein Komma enthalt, stimmt auf eine Sequenz von genau i Ubereinstimmungen des Atoms uberein. Ein Atom, auf das eine Beschrankung folgt, die eine Ganzzahl i und ein Komma enthalt, stimmt auf eine Sequenz von i oder mehr Ubereinstimmungen des Atoms uberein. Ein Atom, auf das eine Beschrankung folgt, die zwei Ganzzahlen i und j enthalten, stimmt auf eine Sequenz von i bis einschliesslich j Ubereinstimmungen des Atoms uberein. Ein Atom ist ein regularer Ausdruck, der in >>()<< eingeschlossen ist (der eine Ubereinstimmung mit dem regularen Ausdruck darstellt), eine leere Menge aus >>()<< (der mit der leeren Zeichenkette ubereinstimmt)<*>, ein Klammerausdruck (siehe unten), >>.<< (das mit einem einzelnen Zeichen ubereinstimmt), >>^<< (das mit der leeren Zeichenkette am Zeilenanfang ubereinstimmt), >>$<< (das mit der leeren Zeichenkette am Zeilenende ubereinstimmt), einem >>\<< gefolgt von einem der Zeichen >>^.[$()|*+?{\<< (das mit diesem Zeichen, das als normales Zeichen betrachtet wird, ubereinstimmt), einem >>\<< gefolgt von einem normalen Zeichen<*> (das mit dem Zeichen als normales Zeichen ubereinstimmt, als ob >>\<< nicht vorhanden ware<*>) oder einem einzelnen Zeichen mit keiner weiteren Bedeutung (was mit diesem Zeichen ubereinstimmt). Ein >>{<< gefolgt von einem Zeichen, das keine Ziffer ist, ist ein normales Zeichen, nicht der Anfang einer Beschrankung<*>. Es ist verboten, einen RA mit >>\<< abzuschliessen. Ein Klammerausdruck ist eine Liste von Zeichen, die in >>[]<< eingeschlossen sind. Er stimmt normalerweise mit einem einzelnen Zeichen aus der Liste uberein (siehe aber nachfolgend). Falls die Liste mit einem >>^<< beginnt, stimmt er mit jedem einzelnen Zeichen (siehe aber nachfolgend) uberein, das nicht in der Liste ist. Falls zwei Zeichen in der Liste durch ein >>-<< getrennt sind, ist dies eine Abkurzung fur den ganzen Bereich der Zeichen zwischen diesen zwei (einschliesslich) in der Sortierordnung, beispielsweise stimmt >>[0-9]<< in ASCII mit jeder dezimalen Ziffer uberein. Es ist verboten<*>, dass zwei Bereiche den gleichen Endpunkt haben, beispielsweise >>a-c-e<<. Bereiche hangen stark von der Sortierordnung ab und portierbare Programme sollten vermeiden, davon abzuhangen. Um ein wortliches >>]<< in die Liste aufzunehmen, verwenden Sie es als erstes Zeichen (moglicherweise nach einem >>^<<). Um ein wortliches >>-<< aufzunehmen, verwenden Sie es als erstes oder letztes Zeichen oder als zweiten Endpunkt eines Bereichs. Um ein wortliches >>-<< als ersten Endpunkt eines Bereiches zu verwenden, schliessen Sie es in >>[.<< und >>.]<< ein, um es zu einem Sortierordnungselement zu machen (siehe nachfolgend). Mit der Ausnahme dieser und einiger Kombinationen, die >>[<< verwenden (siehe nachsten Absatz), verlieren alle anderen besonderen Zeichen, einschliesslich >>\<<, innerhalb von Klammerausdrucken ihre besondere Bedeutung. Innerhalb eines Klammerausdrucks steht ein Sortierordnungselement (ein Zeichen, eine Mehrzeichensequenz, das so einsortiert wird, also ob es ein einzelnes Zeichen ware oder ein Zuordnungs-Sequenzname fur eines davon), das in >>[.<< und >>.]<< eingeschlossen ist, fur die Zeichensequenz des Sortierordnungselements. Die Sequenz ist ein einzelnes Element der Klammerausdrucksliste. Eine Klammerausdrucksliste, die ein Mehrzeichen-Sortierordnungselement enthalt, kann daher mit mehr als einem Zeichen ubereinstimmen, falls beispielsweise die Sortierordnung ein Zuordnungslement >>ch<< enthalt, dann stimmt der RA >>[[.ch.]]*c<< mit den ersten funf Zeichen von >>chchcc<< uberein. Innerhalb eines Klammerausdrucks ist ein in >>[=<< und >>=]<< eingeschlossenes Sortierordnungselement eine Aquivalenzklasse, die fur eine Abfolge von Zeichen aller Sortierordnungselemente steht, die aquivalent zu diesem sind, einschliesslich ihm selbst. (Falls es keine anderen aquivalenten Sortierordnungselemente gibt, erfolgt die Behandlung also ob die Begrenzer >>[.<< und >>.]<< waren.) Falls beispielsweise o und o die Mitglieder einer Aquivalenzklasse waren, dann waren >>[[=o=]]<<, >>[[=o=]]<< und >>[oo]<< alle synonym. Eine Aquivalenzklasse darf nicht<*> der Endpunkt eines Bereichs sein. Innerhalb eines Klammerausdrucks steht der Name einer Zeichenklasse, eingeschlossen in >>[:<< und >>:]<<, fur eine Liste aller Zeichen, die zu der Klasse gehoren. Standard-Zeichenklassennamen sind: alnum digit punct alpha graph space blank lower upper cntrl print xdigit Diese stehen fur die in wctype(3) definierten Zeichenklassen. Eine Locale konnte andere bereitstellen. Eine Zeichenklasse darf nicht als Endpunkt eines Bereichs verwandt werden. Falls ein RA mit mehr als einer Teilzeichenkette einer gegebenen Zeichenkette ubereinstimmen konnte, passt der RA auf die Teilzeichenkette, die am fruhsten in der Zeichenkette beginnt. Falls der RA auf mehr als eine Teilzeichenkette passen konnte, die an diesem Punkt beginnt, stimmt er mit der langsten uberein. Teilausdrucke passen auch auf die langsten moglichen Teilzeichenketten, mit der Nebenbedingung, dass die gesamte Ubereinstimmung so lang wie moglich sein muss, wobei Teilausdrucke, die fruher im RA beginnen gegenuber spateren Prioritat haben. Beachten Sie, dass Teilausdrucke hoherer Ordnung daher Prioritat gegenuber ihren Komponententeilausdrucken niedrigerer Ordnung haben. Die Lange von Ubereinstimmungen wird in Zeichen gemessen, nicht in Sortierordnungselementen. Eine leere Zeichenkette wird als langer als keine Ubereinstimmung betrachtet. Beispielsweise stimmt >>bb*<< mit den drei mittleren Zeichen von >>abbbc<< uberein, >>(wee|week)(knights|nights) stimmt mit allen zehn Zeichen von >>weeknights<< uberein. Wird >>(.*).*<< auf >>abc<< angewandt, passt der geklammerte Unterausdruck auf alle drei Zeichen; und wenn >>(a*)*<< mit >>bc<< verglichen wird, passen der gesamte RA und der geklammerte Unterausdruck auf die leere Zeichenkette. Falls der Vergleich unabhangig von der Gross-/Kleinschreibung verlangt wird, ist die Auswirkung so, als ob alle Unterscheidungen zwischen Gross- und Kleinschreibung im Alphabet verschwunden waren. Wenn ein alphabetisches Zeichen, das in verschiedenen Gross-/Kleinschreibungen existiert, als normales Zeichen ausserhalb eines Klammerausdrucks auftaucht, wird es effektiv in einen Klammerausdruck, der Gross- und Kleinschreibung enthalt, umgewandelt. Beispielsweise wird >>x<< zu >>[xX]<<. Wenn es innerhalb eines Klammerausdrucks auftaucht, werden alle Entsprechungen in der Gross-/Kleinschreibung zu dem Klammerausdruck hinzugefugt, so dass beispielsweise aus >>[x]<< >>[xX]<< und aus >>[^x]<< >>[^xX]<< wird. Die Lange des RAs unterliegt keiner besonderen Beschrankung<*>. Programme, die portierbar sein sollen, sollten die RA kurzer als 256 byte halten, da eine POSIX-konforme Implementierung verweigern konnte, langere RA zu akzeptieren. Veraltete (>>einfache<<) regulare Ausdrucke unterscheiden sich in verschiedenen Hinsichten. >>|<<, >>+<< und >>?<< sind gewohnliche Zeichen und es gibt kein Aquivalent fur ihre Funktionalitat. Die Begrenzer fur Beschrankungen sind >>\{<< und >>\}<<; >>{<< und >>}<< alleinstehend sind gewohnliche Zeichen. Die Klammern zum Verschachteln von Unterausdrucken sind >>\(<< und >>\)<<, >>(<< und >>)<< alleinstehend sind gewohnliche Zeichen. >>^<< ist ein gewohnliches Zeichen ausser am Anfang eines RA oder<*> am Anfang eines geklammerten Unterausdrucks. >>$<< ist ein gewohnliches Zeichen ausser am Ende eines RA oder<*> am Ende eines geklammerten Unterausdrucks. >>*<< ist ein gewohnliches Zeichen, falls es am Anfang des RA oder am Anfang des geklammerten Unterausdrucks (nach dem moglichen einleitenden >>^<<) auftaucht. Schliesslich gibt es eine neue Art von Atom, eine Ruckwartsreferenz: >>\<<, gefolgt von einer von Null verschiedenen Ziffer d stimmt mit der gleichen Abfolge von Zeichen uberein, die auch mit dem dten geklammerten Unterausdruck ubereinstimmt (die Nummerierung der Unterausdrucke erfolgt durch die Positionen ihrer offnenden Klammern, von links nach rechts), so dass beispielsweise >>\([bc]\)\1<< mit >>bb<< oder >>cc<< aber nicht mit >>bc<< ubereinstimmt. FEHLER Die Existenz von zwei Arten von RAs ist Murks. Die aktuelle POSIX.2-Spezifikation sagt, dass >>)<< ein gewohnliches Zeichen ist, falls das passende >>(<< fehlt; dies war ein ungeplantes Ergebnis eines Formulierungsfehlers und dies wird wahrscheinlich geandert. Verlassen Sie sich daher nicht darauf. Ruckwartsreferenzen sind ein schrecklicher Murks. Sie stellen ein grosses Problem fur effiziente Implementierungen dar. Sie sind auch etwas vage definiert (stimmt >>a\(\(b\)*\2\)*d<< mit >>abbbd<< uberein?). Verlassen Sie sich nicht darauf. Die Spezifikation von POSIX.2 von Gross-/Kleinschreibung-unabhangiger Ubereinstimmung ist vage. Die oben angegebene Definition von >>eine Gross-/Kleinschreibungsvariante impliziert alle<< ist der aktuelle Konsens zwischen den Implementierern uber die richtige Interpretation. AUTOR Diese Seite entstammt Henry Spencers Paket Regex. SIEHE AUCH grep(1), regex(3) POSIX.2, Abschnitt 2.8 (Notation Regularer Ausdrucke). UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.18 8. Februar 2026 regex(7)