regex(3) | Library Functions Manual | regex(3) |
regcomp, regexec, regerror, regfree - Fonctions POSIX pour les expressions rationnelles (« regex »)
Bibliothèque C standard (libc, -lc)
#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 string, size_t nmatch, regmatch_t pmatch[restrict .nmatch], int eflags);
size_t regerror(int errcode, const regex_t *restrict preg, char errbuf[restrict .errbuf_size], size_t errbuf_size); void regfree(regex_t *preg);
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 un tampon de stockage du motif, regex, un pointeur vers une chaîne terminée par un caractère NULL, et cflags, les attributs indiquant le type de compilation.
Toutes les recherches d'expressions rationnelles sont effectuées au moyen d'un tampon de motif compilé, ainsi regexec() doit toujours recevoir l'adresse d'un motif initialisé par regcomp().
cflags est le OU binaire entre une ou plusieurs constantes symboliques suivantes :
regexec() est utilisée pour mettre en correspondance une chaîne terminée par un caractère NULL, avec le tampon de motif précompilé preg. nmatch et pmatch fournissent des informations concernant l'emplacement des correspondances. eflags est un OU binaire entre zéro ou plusieurs des drapeaux suivants :
À 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 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. Les positions de la sous-expression débutant à la ième parenthèse sont stockées dans pmatch[i]. Les adresses de mise en correspondance de l'expression complète sont stockées dans pmatch[0]. (Remarquez que pour obtenir les positions de correspondance de la sous-expression N, nmatch doit valoir au moins N+1.) Tous les éléments de structure inutilisés 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.
regerror() est utilisé pour transformer les codes d'erreur renvoyés par regcomp() et par regexec() en libellés.
regerror() is passed the error code, errcode, the pattern buffer, preg, a pointer to a character string buffer, errbuf, and the size of the string buffer, errbuf_size. It returns the size of the errbuf required to contain the null-terminated error message string. If both errbuf and errbuf_size are nonzero, errbuf is filled in with the first errbuf_size - 1 characters of the error message and a terminating null byte ('\0').
Supplying regfree() with a precompiled pattern buffer, preg, will free the memory allocated to the pattern buffer by the compiling process, regcomp().
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.
Les erreurs suivantes peuvent être déclenchées par regcomp() :
Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface | Attribut | Valeur |
regcomp(), regexec() | Sécurité des threads | MT-Safe locale |
regerror() | Sécurité des threads | MT-Safe env |
regfree() | Sécurité des threads | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
#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(®ex, re, REG_NEWLINE))
exit(EXIT_FAILURE);
printf("String = \"%s\"\n", str);
printf("Matches:\n");
for (unsigned int i = 0; ; i++) {
if (regexec(®ex, 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); }
La section Regular Expressions du manuel de la glibc
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> et bubu <bubub@no-log.org>
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.
5 février 2023 | Pages du manuel de Linux 6.03 |