Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       regcomp,  regexec,  regerror,  regfree – Fonctions POSIX pour les expressions rationnelles
       (« regex »)

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <regex.h>

       int regcomp(regex_t *restrict preg, const char *restrict regex,
                   int cflags);
       int regexec(const regex_t *restrict preg, const char *restrict chaîne,
                   size_t nmatch, regmatch_t pmatch[_Nullable restrict .nmatch],
                   int eflags);

       size_t regerror(int errcode, const regex_t *_Nullable restrict preg,
                   char errbuf[_Nullable restrict .errbuf_size],
                   size_t errbuf_size);
       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;

DESCRIPTION

   Compilation
       regcomp() est utilisée pour compiler une expression rationnelle sous une forme  utilisable
       par la suite pour des recherches avec regexec().

       En  cas  de  succès,  le  tampon  de motif dans *preg est initialisé. regex est une chaîne
       terminée par NULL. La locale doit être la même lors de l'exécution de regexec().

       Après la réussite de regcomp(), preg->re_nsub contient le nombre de sous-expressions  dans
       regex.  Ainsi,  une  valeur  de  preg->re_nsub  + 1  passée  comme  nmatch à regexec() est
       suffisante pour capturer toutes les correspondances.

       cflags est le OU binaire entre zéro ou plus des constantes symboliques suivantes :

       REG_EXTENDED
              Utiliser la syntaxe d'expression rationnelle étendue POSIX pour interpréter  regex.
              Sinon, la syntaxe d'expression rationnelle de base POSIX est utilisée.

       REG_ICASE
              Ne  pas  différencier  les  capitales  des  minuscules.  Les  recherches  regexec()
              suivantes utilisant le tampon de motif seront insensibles à la casse.

       REG_NOSUB
              Ne rapporter que les réussites complètes. regexec() utilisera seulement pmatch pour
              REG_STARTEND, ignorant nmatch.

       REG_NEWLINE
              Les opérateurs «correspondent pas à un saut de ligne.

              Une  liste  de  non  correspondance  ([^...])  ne contenant pas de saut de ligne ne
              correspond pas à un saut de ligne.

              L'opérateur « correspondance-à-début-de-ligne » (^) correspond  à  la  chaîne  vide
              immédiatement  après  un  saut  de ligne, même si eflags, le drapeau d'exécution de
              regexec(), contient REG_NOTBOL.

              L'opérateur « correspondance-à-fin-de-ligne » ($)  s'identifie  à  la  chaîne  vide
              précédant  immédiatement  un  saut  de  ligne,  même  si l'attribut eflags contient
              REG_NOTEOL.

   Correspondance
       regexec() est utilisée pour mettre en correspondance une chaîne terminée par NULL avec  le
       tampon  de  motif précompilé *preg qui doit avoir été initialisé par regexec(). eflags est
       un OU binaire entre zéro ou plus des drapeaux suivants :

       REG_NOTBOL
              L'opérateur  « correpondance-à-début-de-ligne »   échoue   toujours   (mais   voyez
              l'attribut  de  compilation  REG_NEWLINE ci-dessus). Cet attribut peut être utilisé
              quand différentes portions d'une chaîne sont transmises à regexec() et que le début
              de la chaîne ne doit pas être interprété comme un début de ligne.

       REG_NOTEOL
              L'opérateur   « correspondance-à-fin-de-ligne »   échoue   toujours   (mais   voyez
              l'attribut de compilation REG_NEWLINE ci-dessus).

       REG_TARTEND
              Établir une correspondance [chaîne + pmatch[0].rm_so, chaîne +  pmatch[0].rm_eo)  à
              la  place  de  [chaîne,  chaîne  + strlen(chaîne)). Cela permet les correspondances
              d'octets NULL incorporés et évite un strlen(3) sur les chaînes à  longueur  connue.
              Si  des  correspondances  quelconques sont renvoyées (REG_NOSUB n'a pas été passé à
              regcomp(), la correspondance a réussi  et  nmatch  >  0),  comme  d'habitude  elles
              écrasent  pmatch  et  la localisation des correspondances demeure relative à chaîne
              (pas à chaîne + pmatch[0].rm_so). Ce drapeau est une extension  BSD,  absente  dans
              POSIX.

   Emplacement des correspondances
       À  moins  que  REG_NOSUB  n'ait  été  passé  à  regcomp(),  il  est  possible d'obtenir la
       localisation des correspondances dans chaîne : regexec() renseigne les éléments nmatch  de
       pmatch  avec  les  résultats suivants : pmatch[0] correspond à la correspondance complète,
       pmatch[1] à la première sous-expression, etc. S'il y a plus de correspondances que nmatch,
       elles  sont  abandonnées ;  s'il  y  en  a moins, les éléments non utilisés de pmatch sont
       remplis de -1.

       Chaque correspondance valable renvoyée (non -1) correspond à la  plage  [chaîne  +  rm_so,
       chaîne + rm_eo).

       regoff_t  est  un  type  d'entier signé capable de contenir la plus grande valeur qui peut
       être stockée dans un type ptrdiff_t ou dans un type ssize_t.

   Rapport d'erreurs
       regerror() est utilisé pour transformer les codes d'erreur renvoyés par regcomp()  et  par
       regexec() en chaînes de message d'erreur.

       Si  preg n'est pas un pointeur NULL, errcode doit être la dernière erreur renvoyée par une
       opération sur preg.

       Si errbuf_size est différent de 0, jusqu'à errbuf_size octets sont copiés dans errbuf ; la
       chaîne  d'erreur  est  toujours  terminée  par  NULL  et tronquée pour tenir dans l'espace
       alloué.

   Libération
       regfree() désinitialise  le  tampon  de  motif  dans  *preg,  libérant  toute  la  mémoire
       associée ; *preg doit avoir été initialisé par regcomp().

VALEUR RENVOYÉE

       regcomp() renvoie zéro si la compilation réussit, ou un code d'erreur en cas d'échec.

       regexec() renvoie zéro si la correspondance réussit ou REG_NOMATCH si elle échoue.

       regerror() renvoie la taille du tampon requise pour contenir la chaîne.

ERREURS

       Les erreurs suivantes peuvent être déclenchées par regcomp() :

       REG_BADBR
              Utilisation illégale de l'opérateur de référence inverse.

       REG_BADPAT
              Utilisation illégale d'un opérateur du type groupe ou liste.

       REG_BADRPT
              Utilisation  illégale  d'opérateurs  de  répétition,  comme  un  caractère « * » en
              première place.

       REG_EBRACE
              Accolade manquante.

       REG_EBRACK
              Crochet manquant.

       REG_ECOLLATE
              Élément de collation invalide.

       REG_ECTYPE
              Nom de classe de caractères inconnu.

       REG_EEND
              Erreur non spécifique. Elle n'est pas définie par POSIX.

       REG_EESCAPE
              Barre oblique inverse de fin.

       REG_EPAREN
              Parenthèse manquante.

       REG_ERANGE
              Utilisation  illégale  de  l'opérateur  d'intervalle.  Par  exemple,  la   fin   de
              l'intervalle est inférieure au début de l'intervalle.

       REG_ESIZE
              La compilation d'expressions rationnelles a besoin d'un tampon de taille supérieure
              à 64 Ko. Cela n'est pas défini par POSIX.

       REG_ESPACE
              Les routines regex ont épuisé la mémoire.

       REG_ESUBREG
              Référence inverse illégale vers une sous-expression.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌─────────────────────────────────────────────────┬──────────────────────┬────────────────┐
       │InterfaceAttributValeur         │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │regcomp(), regexec()                             │ Sécurité des threads │ MT-Safe locale │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │regerror()                                       │ Sécurité des threads │ MT-Safe env    │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │regfree()                                        │ Sécurité des threads │ MT-Safe        │
       └─────────────────────────────────────────────────┴──────────────────────┴────────────────┘

STANDARDS

       POSIX.1-2008.

HISTORIQUE

       POSIX.1-2001.

       Avant POSIX.1-2008, regoff_t était requis pour pouvoir stocker la plus grande  valeur  qui
       pouvait être contenue dans le type off_t ou dans le type ssize_ttype.

AVERTISSEMENTS

       re_nsub  n'est  requis pour être initialisé si REG_NOSUB n'a pas été spécifié, mais toutes
       les implémentations connues l'initialisent de toutes façons.

       À la fois regex_t et regmatch_t peuvent avoir (et ont) plus de membres dans n'importe quel
       ordre. Il faut toujours les référencer par leur nom.

EXEMPLES

       #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("String = \"%s\"\n", str);
           printf("Matches:\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("offset = %jd; length = %jd\n", (intmax_t) off,
                       (intmax_t) len);
               printf("substring = \"%.*s\"\n", len, s + pmatch[0].rm_so);

               s += pmatch[0].rm_eo;
           }

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       grep(1), regex(7)

       La section Regular Expressions du manuel de la glibc

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot   <david@tilapin.org>,   Frédéric   Hantrais
       <fhantrais@gmail.com>,    bubu    <bubub@no-log.org>    et   Jean-Pierre   Giraud   <jean-
       pierregiraud@neuf.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.