Man page - regcomp(3)

Packages contains this manual

Available languages:

en fr ja de

Manual

regex

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
Compilation
Correspondance
Emplacement des correspondances
Rapport d’erreurs
Libération
VALEUR RENVOYÉE
ERREURS
ATTRIBUTS
STANDARDS
HISTORIQUE
AVERTISSEMENTS
EXEMPLES
VOIR AUSSI
TRADUCTION

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).

Image grohtml-3865814-1.png

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_t type.

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 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 .