Provided by: manpages-de_4.21.0-2_all bug

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.