Provided by: manpages-de_4.27.0-1_all 

BEZEICHNUNG
regex - Reguläre Ausdrücke gemäß POSIX.2
BESCHREIBUNG
Reguläre Ausdrücke (»RA«), wie sie in POSIX.2 definiert sind, gibt es in zwei Arten: moderne RA (ungefähr
die von egrep(1); POSIX.2 nennt sie »erweiterte« RA) und veraltete RA (ungefähr die von ed(1); gemäß
POSIX.2 »einfache« RA). Veraltete RA existieren hauptsächlich zur Rückwärtskompatibilität in einigen
alten Programmen; sie werden am Ende beschrieben. POSIX.2 lässt einige Aspekte der RA-Syntax und
-Semantik offen; »†« markiert Entscheidungen zu diesen Aspekten, die nicht vollständig portabel zu
anderen POSIX.2-Implementierungen sein können.
Ein (moderner) RA sind einer† oder mehrere† Zweige, getrennt durch »|«. Er stimmt mit allem überein, das
mit einem der Zweige übereinstimmt.
Ein Zweig sind eine† oder mehrere aneinandergehängte Stücke. Die Übereinstimmung erfolgt für das erste,
gefolgt von der Übereinstimmung für das zweite und so weiter.
Ein Stück ist ein Atom, möglicherweise gefolgt von einem einzelnen† »*«, »+«, »?« oder einer
Beschränkung. Ein Atom, auf das ein »*« folgt, stimmt mit einer Sequenz von 0 oder mehr Übereinstimmungen
mit diesem Atom überein. Ein Atom, auf das ein »+« folgt, stimmt mit einer Sequenz von 1 oder mehr
Übereinstimmungen mit diesem Atom überein. Ein Atom, auf das ein »?« folgt, stimmt mit einer Sequenz von
0 oder 1 Übereinstimmungen mit diesem Atom überein.
Eine Beschränkung ist »{« gefolgt von einer vorzeichenlosen Ganzzahl in Dezimaldarstellung,
möglicherweise gefolgt von »,«, möglicherweise gefolgt von einer weiteren vorzeichenlosen Ganzzahl in
Dezimaldarstellung, immer gefolgt von »}«. Die ganzen Zahlen müssen zwischen 0 und RE_DUP_MAX (255†)
einschließlich liegen und falls es davon zwei gibt, darf die erste nicht größer als die zweite sein. Ein
Atom, auf das eine Beschränkung folgt, die eine Ganzzahl i und kein Komma enthält, stimmt auf eine
Sequenz von genau i Übereinstimmungen des Atoms überein. Ein Atom, auf das eine Beschränkung folgt, die
eine Ganzzahl i und ein Komma enthält, stimmt auf eine Sequenz von i oder mehr Übereinstimmungen des
Atoms überein. Ein Atom, auf das eine Beschränkung folgt, die zwei Ganzzahlen i und j enthalten, stimmt
auf eine Sequenz von i bis einschließlich j Übereinstimmungen des Atoms überein.
Ein Atom ist ein regulärer Ausdruck, der in »()« eingeschlossen ist (der eine Übereinstimmung mit dem
regulären Ausdruck darstellt), eine leere Menge aus »()« (der mit der leeren Zeichenkette
übereinstimmt)†, ein Klammerausdruck (siehe unten), ».« (das mit einem einzelnen Zeichen übereinstimmt),
»^« (das mit der leeren Zeichenkette am Zeilenanfang übereinstimmt), »$« (das mit der leeren Zeichenkette
am Zeilenende übereinstimmt), einem »\« gefolgt von einem der Zeichen »^.[$()|*+?{\« (das mit diesem
Zeichen, das als normales Zeichen betrachtet wird, übereinstimmt), einem »\« gefolgt von einem normalen
Zeichen† (das mit dem Zeichen als normales Zeichen übereinstimmt, als ob »\« nicht vorhanden wäre†) oder
einem einzelnen Zeichen mit keiner weiteren Bedeutung (was mit diesem Zeichen übereinstimmt). Ein »{«
gefolgt von einem Zeichen, das keine Ziffer ist, ist ein normales Zeichen, nicht der Anfang einer
Beschränkung†. Es ist verboten, einen RA mit »\« abzuschließen.
Ein Klammerausdruck ist eine Liste von Zeichen, die in »[]« eingeschlossen sind. Er stimmt normalerweise
mit einem einzelnen Zeichen aus der Liste überein (siehe aber nachfolgend). Falls die Liste mit einem »^«
beginnt, stimmt er mit jedem einzelnen Zeichen (siehe aber nachfolgend) überein, das nicht in der Liste
ist. Falls zwei Zeichen in der Liste durch ein »-« getrennt sind, ist dies eine Abkürzung für den ganzen
Bereich der Zeichen zwischen diesen zwei (einschließlich) in der Sortierordnung, beispielsweise stimmt
»[0-9]« in ASCII mit jeder dezimalen Ziffer überein. Es ist verboten†, dass zwei Bereiche den gleichen
Endpunkt haben, beispielsweise »a-c-e«. Bereiche hängen stark von der Sortierordnung ab und portierbare
Programme sollten vermeiden, davon abzuhängen.
Um ein wörtliches »]« in die Liste aufzunehmen, verwenden Sie es als erstes Zeichen (möglicherweise nach
einem »^«). Um ein wörtliches »-« aufzunehmen, verwenden Sie es als erstes oder letztes Zeichen oder als
zweiten Endpunkt eines Bereichs. Um ein wörtliches »-« als ersten Endpunkt eines Bereiches zu verwenden,
schließen Sie es in »[.« und ».]« ein, um es zu einem Sortierordnungselement zu machen (siehe
nachfolgend). Mit der Ausnahme dieser und einiger Kombinationen, die »[« verwenden (siehe nächsten
Absatz), verlieren alle anderen besonderen Zeichen, einschließlich »\«, innerhalb von Klammerausdrücken
ihre besondere Bedeutung.
Innerhalb eines Klammerausdrucks steht ein Sortierordnungselement (ein Zeichen, eine Mehrzeichensequenz,
das so einsortiert wird, also ob es ein einzelnes Zeichen wäre oder ein Zuordnungs-Sequenzname für eines
davon), das in »[.« und ».]« eingeschlossen ist, für die Zeichensequenz des Sortierordnungselements. Die
Sequenz ist ein einzelnes Element der Klammerausdrucksliste. Eine Klammerausdrucksliste, die ein
Mehrzeichen-Sortierordnungselement enthält, kann daher mit mehr als einem Zeichen übereinstimmen, falls
beispielsweise die Sortierordnung ein Zuordnungslement »ch« enthält, dann stimmt der RA »[[.ch.]]*c« mit
den ersten fünf Zeichen von »chchcc« überein.
Innerhalb eines Klammerausdrucks ist ein in »[=« und »=]« eingeschlossenes Sortierordnungselement eine
Äquivalenzklasse, die für eine Abfolge von Zeichen aller Sortierordnungselemente steht, die äquivalent zu
diesem sind, einschließlich ihm selbst. (Falls es keine anderen äquivalenten Sortierordnungselemente
gibt, erfolgt die Behandlung also ob die Begrenzer »[.« und ».]« wären.) Falls beispielsweise o und ô die
Mitglieder einer Äquivalenzklasse wären, dann wären »[[=o=]]«, »[[=ô=]]« und »[oô]« alle synonym. Eine
Äquivalenzklasse darf nicht† der Endpunkt eines Bereichs sein.
Innerhalb eines Klammerausdrucks steht der Name einer Zeichenklasse, eingeschlossen in »[:« und »:]«, für
eine Liste aller Zeichen, die zu der Klasse gehören. Standard-Zeichenklassennamen sind:
alnum digit punct
alpha graph space
blank lower upper
cntrl print xdigit
Diese stehen für die in wctype(3) definierten Zeichenklassen. Eine Locale könnte andere bereitstellen.
Eine Zeichenklasse darf nicht als Endpunkt eines Bereichs verwandt werden.
Falls ein RA mit mehr als einer Teilzeichenkette einer gegebenen Zeichenkette übereinstimmen könnte,
passt der RA auf die Teilzeichenkette, die am frühsten in der Zeichenkette beginnt. Falls der RA auf mehr
als eine Teilzeichenkette passen könnte, die an diesem Punkt beginnt, stimmt er mit der längsten überein.
Teilausdrücke passen auch auf die längsten möglichen Teilzeichenketten, mit der Nebenbedingung, dass die
gesamte Übereinstimmung so lang wie möglich sein muss, wobei Teilausdrücke, die früher im RA beginnen
gegenüber späteren Priorität haben. Beachten Sie, dass Teilausdrücke höherer Ordnung daher Priorität
gegenüber ihren Komponententeilausdrücken niedrigerer Ordnung haben.
Die Länge von Übereinstimmungen wird in Zeichen gemessen, nicht in Sortierordnungselementen. Eine leere
Zeichenkette wird als länger als keine Übereinstimmung betrachtet. Beispielsweise stimmt »bb*« mit den
drei mittleren Zeichen von »abbbc« überein, »(wee|week)(knights|nights) stimmt mit allen zehn Zeichen von
»weeknights« überein. 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 unabhängig von der Groß-/Kleinschreibung verlangt wird, ist die Auswirkung so, als ob
alle Unterscheidungen zwischen Groß- und Kleinschreibung im Alphabet verschwunden wären. Wenn ein
alphabetisches Zeichen, das in verschiedenen Groß-/Kleinschreibungen existiert, als normales Zeichen
außerhalb eines Klammerausdrucks auftaucht, wird es effektiv in einen Klammerausdruck, der Groß- und
Kleinschreibung enthält, umgewandelt. Beispielsweise wird »x« zu »[xX]«. Wenn es innerhalb eines
Klammerausdrucks auftaucht, werden alle Entsprechungen in der Groß-/Kleinschreibung zu dem
Klammerausdruck hinzugefügt, so dass beispielsweise aus »[x]« »[xX]« und aus »[^x]« »[^xX]« wird.
Die Länge des RAs unterliegt keiner besonderen Beschränkung†. Programme, die portierbar sein sollen,
sollten die RA kürzer als 256 byte halten, da eine POSIX-konforme Implementierung verweigern könnte,
längere RA zu akzeptieren.
Veraltete (»einfache«) reguläre Ausdrücke unterscheiden sich in verschiedenen Hinsichten. »|«, »+« und
»?« sind gewöhnliche Zeichen und es gibt kein Äquivalent für ihre Funktionalität. Die Begrenzer für
Beschränkungen sind »\{« und »\}«; »{« und »}« alleinstehend sind gewöhnliche Zeichen. Die Klammern zum
Verschachteln von Unterausdrücken sind »\(« und »\)«, »(« und »)« alleinstehend sind gewöhnliche Zeichen.
»^« ist ein gewöhnliches Zeichen außer am Anfang eines RA oder† am Anfang eines geklammerten
Unterausdrucks. »$« ist ein gewöhnliches Zeichen außer am Ende eines RA oder† am Ende eines geklammerten
Unterausdrucks. »*« ist ein gewöhnliches Zeichen, falls es am Anfang des RA oder am Anfang des
geklammerten Unterausdrucks (nach dem möglichen einleitenden »^«) auftaucht.
Schließlich gibt es eine neue Art von Atom, eine Rückwärtsreferenz: »\«, gefolgt von einer von Null
verschiedenen Ziffer d stimmt mit der gleichen Abfolge von Zeichen überein, die auch mit dem dten
geklammerten Unterausdruck übereinstimmt (die Nummerierung der Unterausdrücke erfolgt durch die
Positionen ihrer öffnenden Klammern, von links nach rechts), so dass beispielsweise »\([bc]\)\1« mit »bb«
oder »cc« aber nicht mit »bc« übereinstimmt.
FEHLER
Die Existenz von zwei Arten von RAs ist Murks.
Die aktuelle POSIX.2-Spezifikation sagt, dass »)« ein gewöhnliches Zeichen ist, falls das passende »(«
fehlt; dies war ein ungeplantes Ergebnis eines Formulierungsfehlers und dies wird wahrscheinlich
geändert. Verlassen Sie sich daher nicht darauf.
Rückwärtsreferenzen sind ein schrecklicher Murks. Sie stellen ein großes Problem für effiziente
Implementierungen dar. Sie sind auch etwas vage definiert (stimmt »a\(\(b\)*\2\)*d« mit »abbbd«
überein?). Verlassen Sie sich nicht darauf.
Die Spezifikation von POSIX.2 von Groß-/Kleinschreibung-unabhängiger Übereinstimmung ist vage. Die oben
angegebene Definition von »eine Groß-/Kleinschreibungsvariante impliziert alle« ist der aktuelle Konsens
zwischen den Implementierern über die richtige Interpretation.
AUTOR
Diese Seite entstammt Henry Spencers Paket Regex.
SIEHE AUCH
grep(1), regex(3)
POSIX.2, Abschnitt 2.8 (Notation Regulärer Ausdrücke).
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die
Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.
Linux man-pages 6.9.1 15. Juni 2024 regex(7)