Provided by: manpages-de-dev_4.27.0-1_all bug

BEZEICHNUNG

       regcomp, regexec, regerror, regfree - Regulärer-Ausdruck-Funktionen gemäß POSIX

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <regex.h>

       int regcomp(regex_t *restrict preg, const char *restrict regaus,
                   int kschalter);
       int regexec(const regex_t *restrict preg, const char *restrict zeichenkette,
                   size_t ntreffer, regmatch_t ptreffer[_Nullable restrict .ntreffer],
                   int aschalter);

       size_t regerror(int fehlercode, const regex_t *_Nullable restrict preg,
                   char fehlerpuf[_Nullable restrict .fehlerpufgröße],
                   size_t fehlerpufgröße);
       void regfree(regex_t *preg);

       typedef struct {
       size_t    re_nsub;
       } regex_t;

       typedef struct {
       regoff_t  rm_so;
       regoff_t  rm_eo;
       } regmatch_t;

       typedef /* … */  regoff_t;

BESCHREIBUNG

   Kompilierung
       regcomp()  wird  zur  Kompilierung  eines regulären Ausdrucks in eine Form verwandt, die für nachfolgende
       regexec()-Suchen geeignet ist.

       Im Erfolgsfall wird der Musterpuffer bei  *preg  initialisert.  regaus  ist  eine  auf  Nullbyte  endende
       Zeichenkette. Die Locale muss die gleiche wie bei der Ausführung von regexec() sein.

       Nachdem  regcomp()  erfolgreich  war,  hält  preg->re_nsub die Anzahl der Unterausdrücke in regaus. Daher
       reicht es aus, ein Wert preg->re_nsub + 1 als  ntreffer  an  regexec()  zu  übergeben,  um  alle  Treffer
       einzufangen.

       kschalter ist das bitweises ODER von null oder mehr der Folgenden:

       REG_EXTENDED
              Die  Syntax  der  erweiterten  regulären  Ausdrücke  gemäß POSIX bei der Interpretation von regaus
              verwenden. Falls nicht gesetzt, werden die grundlegenden regulären Ausdrücke gemäß POSIX verwandt.

       REG_ICASE
              Keine Unterscheidung der  Groß-/Kleinschreibung  durchführen.  Nachfolgende  regexec()-Suchen  mit
              diesem Musterpuffer werden die Groß-/Kleinschreibung ignorieren.

       REG_NOSUB
              Nur  den  Gesamterfolg  berichten.  regexec()  wird  nur  ptreffer  für REG_STARTEND verwenden und
              ntreffer ignorieren.

       REG_NEWLINE
              Passt-auf-jedes-Zeichen-Operator passt nicht auf einen Zeilenumbruch.

              Eine Liste nichtpassender Zeichen ([^…]), die keinen Zeilenumbruch enthält, passt nicht auf  einen
              Zeilenumbruch.

              Passt-auf-Zeilenanfang-Operator   (^)   passt   auf  die  leere  Zeichenkette  direkt  nach  einem
              Zeilenumbruch, unabhängig davon, ob die  Ausführungsschalter  von  regexec()  (eflags)  REG_NOTBOL
              enthalten.

              Passt-auf-Zeilenende-Operator ($) passt auf die leere Zeichenkette direkt vor einem Zeilenumbruch,
              unabhängig davon, ob eflags REG_NOTEOL enthält.

   Vergleich
       regexec()  wird  zum Vergleich einer auf Nullbyte endenden Zeichenkette mit dem kompilierten Musterpuffer
       in *preg, der durch regexec() initialisiert sein muss. aschalter ist das  bitweise  ODER  von  null  oder
       mehreren der folgenden Schalter:

       REG_NOTBOL
              Der  Passt-auf-Zeilenanfang-Operator  schlägt  bei  Vergleich  immer  fehl (siehe aber auch obigen
              Kompilierungsschalter REG_NEWLINE).  Dieser  Schalter  kann  verwandt  werden,  wenn  verschiedene
              Anteile  einer  Zeichenkette an regexec() übergeben werden und der Anfang einer Zeichenkette nicht
              als Anfang einer Zeile interpretiert werden soll.

       REG_NOTEOL
              Der Passt-auf-Zeilenende-Operator schlägt  bei  Vergleich  immer  fehl  (siehe  aber  auch  obigen
              Kompilierungsschalter REG_NEWLINE).

       REG_STARTEND
              Passt  auf  [Zeichenkette  +  ptreffer[0].rm_so,  Zeichenkette  +  ptreffer[0].rm_eo) anstelle von
              [Zeichenkette, Zeichenkette + strlen(Zeichenkette)). Dies ermöglicht den Vergleich  mit  Nullbytes
              und  vermeidet  ein strlen(3) bei Zeichenketten mit bekannter Länge. Falls Treffer zurückgeliefert
              wurden (REG_NOSUB wurde nicht an regcomp() übergeben, der Vergleich war erfolgreich und ntreffer >
              0) überschreiben  sie  wie  gewöhnlich  ptreffer  und  der  Vergleichsversatz  bleibt  relativ  zu
              zeichenkette  (nicht  zeichenkette  + ptreffer[0].rm_so). Dieser Schalter ist eine BSD-Erweiterung
              und in POSIX nicht vorhanden.

   Vergleichs-Versätze
       Außer REG_NOSUB wurde an regcomp() übergeben,  ist  es  möglich,  den  Ort  des  Treffers  innerhalb  von
       zeichenkette  zu  bestimmen: regexec() füllt ntreffer Elemente von ptreffer mit Ergebnissen: ptreffere[0]
       entspricht dem gesamten Treffer, ptreffer[1] dem ersten Unterausdruck usw.  Falls  es  mehr  Treffer  als
       ntreffer  gab,  werden  diese  verworfen; falls weniger, werden unbenutzte Elemente von ptreffer mit -1en
       gefüllt.

       Jeder zurückgelieferte  gültige  (nicht  -1)  Treffer  entspricht  dem  Bereich  [zeichenkette  +  rm_so,
       zeichenkette + rm_eo).

       regoff_t  ist  ein vorzeichenbehafteter Ganzzahltyp, der den größten Wert speichern kann, der in entweder
       dem Typ ptrdiff_t oder dem Typ ssize_t gespeichert werden kann.

   Fehlerberichterstattung
       Zur   Umwandlung    der    von    regcomp()    und    regexec()    zurückgelieferten    Fehlercodes    in
       Fehlermeldungszeichenketten wird regerror() verwandt.

       Falls  preg  kein  NULL-Zeiger  ist, muss fehlercode der neuste Fehlercode sein, der von einer Aktion auf
       preg zurückgeliefert wurde.

       Falls fehlerpufgröße nicht 0 ist, werden bis  zu  fehlerpufgröße  an  Bytes  in  fehlerpuf  kopiert;  die
       Fehlerzeichenkette endet immer auf einem Nullbyte und wird abgeschnitten, damit sie passt.

   Freigabe
       regfree()  deinitialisiert  den  Musterpuffer  bei  *preg und gibt sämtlichen zugeordneten Speicher frei.
       *preg muss mittels regcomp() initialisiert worden sein.

RÜCKGABEWERT

       regcomp() liefert Null bei einer erfolgreichen Kompilierung oder einen Fehlercode  bei  einem  Fehlschlag
       zurück.

       regexec() liefert Null bei einem erfolgreichen Treffer oder REG_NOMATCH bei einem Fehlschlag zurück.

       regerror() liefert die Größe des Puffers zurück, der zum Halten der Zeichenkette benötigt wird.

FEHLER

       Von regcomp() können die folgenden Fehler zurückgeliefert werden:

       REG_BADBR
              Ungültige Verwendung des Rückwärtsverweis-Operators.

       REG_BADPAT
              Ungültige Verwendung des Muster-Operators (wie Gruppierung oder Liste).

       REG_BADRPT
              Ungültige Verwendung des Wiederholungs-Operators wie die Verwendung von »*« als erstes Zeichen.

       REG_EBRACE
              Fehlender öffenender oder schließender Intervall-Operator (geschweifte Klammer).

       REG_EBRACK
              Fehlender öffenender oder schließender Listen-Operator (eckige Klammer).

       REG_ECOLLATE
              Ungültiges Sortierelement.

       REG_ECTYPE
              Unbekannter Zeichenklassenname.

       REG_EEND
              Nichtspezifizierter Fehler. Dies wird durch POSIX nicht definiert.

       REG_EESCAPE
              Abschließender Rückwärtsschrägstrich.

       REG_EPAREN
              Fehlender öffenender oder schließender Gruppen-Operator (runde Klammer).

       REG_ERANGE
              Ungültige  Verwendung  des  Bereichs-Operators; beispielsweise tritt der Endpunkt des Bereichs vor
              dem Anfangspunkt auf.

       REG_ESIZE
              Kompilierte reguläre Ausdrücke benötigen einen Musterpuffer, der größer als 64 kB ist. Dies ist in
              POSIX nicht definiert.

       REG_ESPACE
              Die Routinen für reguläre Ausdrücke hatten nicht genug Speicher.

       REG_ESUBREG
              Ungültige Rückwärtsreferenz auf einen Unterausdruck.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
       ┌────────────────────────────────────────────────────────────┬───────────────────────┬──────────────────┐
       │ SchnittstelleAttributWert             │
       ├────────────────────────────────────────────────────────────┼───────────────────────┼──────────────────┤
       │ regcomp(), regexec()                                       │ Multithread-Fähigkeit │ MT-Sicher locale │
       ├────────────────────────────────────────────────────────────┼───────────────────────┼──────────────────┤
       │ regerror()                                                 │ Multithread-Fähigkeit │ MT-Sicher env    │
       ├────────────────────────────────────────────────────────────┼───────────────────────┼──────────────────┤
       │ regfree()                                                  │ Multithread-Fähigkeit │ MT-Sicher        │
       └────────────────────────────────────────────────────────────┴───────────────────────┴──────────────────┘

STANDARDS

       POSIX.1-2008.

GESCHICHTE

       POSIX.1-2001.

       Vor POSIX.1-2008 musste regoff_t in der Lage sein, den größten Wert abzuspeichern, der  in  entweder  dem
       Typ off_t oder dem Typ ssize_t gespeichert werden kann.

WARNUNGEN

       re_nsub  muss  nur  initialisiert  sein,  falls  REG_NOSUB  nicht  festgelegt  wurde, aber alle bekannten
       Implementierungen initialisieren sie trotzdem.

       Sowohl regex_t als auch regmatch_t dürfen (und haben)  weitere  Mitglieder,  in  beliebiger  Reihenfolge.
       Referenzieren Sie sie immer über den Namen.

BEISPIELE

       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <regex.h>

       #define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]))

       static const char *const str =
               "1) John Driverhacker;\n2) John Doe;\n3) John Foo;\n";
       static const char *const re = "John.*o";

       int main(void)
       {
           static const char *s = str;
           regex_t     regex;
           regmatch_t  pmatch[1];
           regoff_t    off, len;

           if (regcomp(&regex, re, REG_NEWLINE))
               exit(EXIT_FAILURE);

           printf("Zeichenkette = \"%s\"\n", str);
           printf("Treffer:\n");

           for (unsigned int i = 0; ; i++) {
               if (regexec(&regex, s, ARRAY_SIZE(pmatch), pmatch, 0))
                   break;

               off = pmatch[0].rm_so + (s - str);
               len = pmatch[0].rm_eo - pmatch[0].rm_so;
               printf("#%zu:\n", i);
               printf("Versatz = %jd; Länge = %jd\n", (intmax_t) off,
                       (intmax_t) len);
               printf("Teilzeichenkette = \"%.*s\"\n", len, s + pmatch[0].rm_so);

               s += pmatch[0].rm_eo;
           }

           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

       grep(1), regex(7)

       Das Handbuch der Glibc, Abschnitt Regular Expressions

Ü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(3)