Provided by: manpages-de_4.23.1-1_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⟩.