Sous-routine regcomp

Objectif

Compile une expression régulière de base ou étendue spécifiée dans une chaîne exécutable.

Bibliothèque

Bibliothèque C standard (libc. a)

Syntaxe

#include <regex.h>

int regcomp ( Preg, 
Pattern,  CFlags)

const char *Preg;
const char *Pattern;
int CFlags;

Descriptif

La sous-routine regcomp compile l'expression régulière de base ou étendue spécifiée par le paramètre Motif et place la sortie dans la structure désignée par le paramètre Prég .

Paramètres

Tableau 1. Paramètres
Article Descriptif
Prég Indique la structure devant recevoir la sortie compilée de la sous-routine regcomp .
Schéma Contient l'expression régulière de base ou étendue à compiler par la sous-routine regcomp .

Le type d'expression régulière par défaut du paramètre Modèle est une expression régulière de base. Une application peut spécifier des expressions régulières étendues avec l'indicateur REG_EXTENDED . Le nombre maximal de sous-expressions dans une expression régulière étendue est 23.

Drapeaux CF Contient le OU inclusif bit à bit de 0 ou plusieurs indicateurs pour la sous-routine regcomp . Ces indicateurs sont définis dans le fichier regex.h :
REG_ETENDU
Utilise des expressions régulières étendues. Le nombre maximal de sous-expressions dans une expression régulière étendue est 23.
REG_ICASE
Ignore la casse en correspondance.
REG_NOSUB
Signale uniquement la réussite ou l'échec dans la sous-routine regexec . Si cet indicateur n'est pas défini, la sous-routine regcomp définit la structure re_nsub sur le nombre d'expressions entre parenthèses trouvées dans le paramètre Motif .
REG_NOUVEAU_LIGNE
Interdit. (point) et expression de crochet non concordante correspondant à un caractère de nouvelle ligne. Les caractères ^ (accent circonflexe) et $ (symbole du dollar) doivent correspondre à la chaîne de longueur zéro qui suit ou précède immédiatement un caractère de nouvelle ligne.

Valeurs renvoyées

Si l'opération aboutit, la sous-routine regcomp renvoie la valeur 0. Sinon, elle renvoie une autre valeur indiquant le type d'échec et le contenu du paramètre Preg n'est pas défini.

Codes d'erreur

Les noms de macro suivants pour les codes d'erreur peuvent être écrits dans la variable globale errno en cas d'erreur:

Tableau 2. Codes d'erreur
Article Descriptif
REG_BADPAT Indique une expression régulière de base ou étendue qui n'est pas valide.
REG_ECOLLATE Indique un élément de classement référencé qui n'est pas valide.
REG_ECTYPE Indique une référence de type de classe de caractères non valide.
REG_EESCAPE Indique un \ de fin dans le modèle.
REG_ESUBREG Indique qu'un nombre dans \digit n'est pas valide ou qu'il est erroné.
REG_EBRACK Indique un déséquilibre [] .
REG_EPAREN Indique un déséquilibre \(\) ou () .
REG_EBRACE Indique un déséquilibre \{\} .
REG_BADBR Indique que le contenu de \{\} est inutilisable: pas un nombre, nombre trop grand, plus de deux nombres ou premier nombre supérieur à la seconde.
REG_ERANGE Indique un point de terminaison inutilisable dans une expression de plage.
REG_ESPACE Indique que la mémoire est en mémoire.
REG_BADRPT Indique un? (point d'interrogation), * (astérisque) ou + (signe plus) non précédée d'une expression régulière de base ou étendue valide.

Si la sous-routine regcomp détecte une expression régulière de base ou étendue non conforme, elle peut renvoyer le code d'erreur REG_BADPAT ou un autre qui décrit plus précisément l'erreur.

Exemples

L'exemple suivant illustre comment faire correspondre une chaîne (spécifiée dans le paramètre Chaîne ) à une expression régulière étendue (spécifiée dans le paramètre Modèle ):

#include <sys/types.h>
#include <regex.h>
int
match(char *string, char *pattern)
{
   int     status;
   regex_t re;
   if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB) != 0)  {
           return(0) ;              /* report error */
   }
   status = regexec(&re, string, (size_t) 0, NULL, 0);
   regfree(&re);
   if (status != 0)  {
           return(0) ;              /* report error */
   }
   return(1);
}

Dans l'exemple précédent, les erreurs sont traitées comme étant sans correspondance. En l'absence de correspondance ou d'erreur, le processus appelant peut obtenir des détails en appelant la sous-routine regerror .