NOM¶
regcomp, regexec, regerror, regfree - Fonctions POSIX pour les expressions
rationnelles (« regex »)
SYNOPSIS¶
#include <sys/types.h>
#include <regex.h>
int regcomp(regex_t *preg, const char *regex, int cflags);
int regexec(const regex_t *preg, const char *string, size_t nmatch,
regmatch_t pmatch[], int eflags);
size_t regerror(int errcode, const regex_t *preg, char *errbuf,
size_t errbuf_size);
void regfree(regex_t *preg);
DESCRIPTION¶
Compilation d'expressions rationnelles POSIX¶
regcomp() est utilisée pour compiler une expression rationnelle sous
une forme utilisable par la suite pour des recherches avec
regexec().
On fournit à
regcomp() les arguments
preg, un pointeur vers
une zone de stockage du motif,
regex, un pointeur vers une chaîne
terminée par un caractère nul, et
cflags, les attributs
indiquant le type de compilation.
Toutes les recherches d'expressions rationnelles sont effectuées à
travers la zone de motif compilé, ainsi
regexec() doit toujours
recevoir l'adresse d'un motif initialisé par
regcomp().
cflags peut être un
OU binaire entre une ou plusieurs
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 majuscules des minuscules. Les
recherches regexec() suivantes utilisant le tampon de motif
n'effectueront pas la différenciation.
- REG_NOSUB
- Ne pas utiliser les correspondances de sous-chaînes.
Les paramètres nmatch et pmatch de regexec()
sont ignorés si le tampon de motif est compilé avec cet
attribut.
- REG_NEWLINE
- L'opérateur «\ n'importe-quel-caractère\
» ne s'identifie pas avec le saut de ligne.
Une liste d'exceptions ( [^...]) ne contenant pas de saut de ligne ne
s'identifie pas avec un saut de ligne.
L'opérateur «\ début-de-ligne\ » ( ^) s'identifie
avec une chaîne vide suivant immédiatement un saut de ligne,
même si l'attribut eflags de regexec() contient
REG_NOTBOL.
L'opérateur «\ fin-de-ligne\ » ( $) s'identifie avec
une chaîne vide précédant immédiatement un saut de
ligne, même si l'attribut eflags contient
REG_NOTEOL.
Correspondance d'expressions rationnelles POSIX¶
regexec() est utilisée pour mettre en correspondance une chaîne
terminée par un caractère nul, avec le tampon de motif
précompilé
preg.
nmatch et
pmatch fournissent
des informations concernant l'emplacement des correspondances.
eflags
peut être un
OU binaire entre les constantes
REG_NOTBOL ou
REG_NOTEOL qui modifient le comportement de la mise en correspondance
décrite ci-dessous.
- REG_NOTBOL
- L'opérateur «\ 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 correspond pas
à un début de ligne.
- REG_NOTEOL
- L'opérateur «\ fin-de-ligne\ » échoue
toujours (mais voyez l'attribut de compilation REG_NEWLINE
ci-dessus)
Décalage d'octets¶
À moins que l'attribut
REG_NOSUB n'ait été utilisé
lors de la compilation du motif, il est possible d'obtenir des informations
sur les correspondances de sous-chaînes.
pmatch doit être
dimensionnée pour contenir au moins
nmatch éléments. Ils
sont remplis par
regexec() avec les adresses des sous-chaînes
mises en correspondance. Tous les éléments inutilisés de
structure contiendront la valeur -1.
La structure
regmatch_t du type
pmatch est définie dans
<regex.h>.
typedef struct {
regoff_t rm_so;
regoff_t rm_eo;
} regmatch_t;
Chaque élément
rm_so différent de -1 indique le point de
départ de la sous-chaîne suivante la plus longue qui soit mise en
correspondance. L'élément
rm_eo indique le décalage de
la fin de la sous-chaîne, qui est l'emplacement du premier caractère
après le texte qui correspond.
Retours d'erreurs POSIX¶
regerror() est utilisé pour transformer les codes d'erreur
renvoyés par
regcomp() et par
regexec() en libellés.
regerror() reçoit le code
errcode, le tampon de motif
preg, un pointeur sur une chaîne de caractères
errbuf,
et la longueur maximale de cette chaîne
errbuf_size. Cette
fonction renvoie la taille
errbuf nécessaire pour contenir le
libellé d'erreur terminé par un caractère nul. Si
errbuf
et
errbuf_size son non nuls,
errbuf est rempli avec les
errbuf_size - 1 premiers caractères du libellé d'erreur,
suivis d'un caractère nul de terminaison (« \0 »).
Libération des tampons de motifs POSIX¶
En fournissant à
regfree() un tampon de motif précompilé
preg, il libérera la mémoire allouée au tampon durant la
compilation avec
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, et
REG_NOMATCH si elle échoue.
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 invalide 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 classement invalide.
- REG_ECTYPE
- Nom de classe de caractère inconnu.
- REG_EEND
- Erreur non spécifique. Elle n'est pas définie par
POSIX.2.
- 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 aurait besoin d'un tampon de taille
supérieure à 64 Ko. Ce n'est pas défini par POSIX.2.
- REG_ESPACE
- Les routines regex ont épuisé la
mémoire.
- REG_ESUBREG
- Référence inverse illégale vers une
sous-expression.
POSIX.1-2001.
VOIR AUSSI¶
grep(1),
regex(7)
La section
Regular Expression Matching du manuel de glibc
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Nicolas François
et l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».