zion - regex
Nom
regcomp, regexec, regerror, regfree - Fonctions regex POSIX.
Résumé
#include <regex.h> .xx w'int regcomp ('u int regcomp (regex_t * preg , const char * regex , int cflags ); .xx w'int regexec ('u int regexec (const regex_t * preg , const char * string , size_t nmatch , regmatch_t pmatch[] , int eflags ); .xx w'size_t regerror ('u size_t regerror (int errcode , const regex_t * preg , char * errbuf , size_t errbuf_size ); .xx w'void regfree (' void regfree (regex_t * preg );
Compilation regex posix
regcomp est utilisée pour compiler une expression régulière 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 régulières 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 Régulière Étendue POSIX pour interpréter regex . Sinon, la syntaxe d'Expression Régulière de Base POSIX est utilisée. |
REG_ICASE
Ne pas différencier les majuscules des minuscules. Les recherches regexec suivantes utilisant le buffer de motif n'effectueront pas la différentiation. |
REG_NOSUB
Ne pas utiliser les correspondances de sous-chaînes. Les paramètres nmatch et pmatch de regexec sont ignorés si le buffer 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 ( [^...] ) s'identifie avec le saut de ligne, même si elle ne le contient pas explicitement. 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 regex posix
regexec est utilisée pour mettre en correspondance une chaîne terminée par un caractère nul, avec le buffer 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 chaine 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) |
Byte offsets
A 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 ainsi : .nf typedef struct { regoff_t rm_so; regoff_t rm_eo ; } regmatch_t; .fi 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. Cette valeur est un décalage (offset) dans la chaîne. L'élément rm_eo indique le décalage de la fin de la sous-chaîne.
Retour derreur 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 buffer 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.
LibÉration du buffer de motif posix
En fournissant à regfree un buffer de motif précompilé preg, il libérera la mémoire allouée au buffer 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_BADRPT
Utilisation invalide d'opérateurs de répetition, comme un caractère ` * ' en première place. |
REG_BADBR
Utilisation illégale de l'opérateur de référence inverse. |
REG_EBRACE
Crochet manquant. |
REG_EBRACK
Accolade 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_ECTYPE
Nom de classe de caractère inconnu. |
REG_EPAREN
Parenthèse manquante. |
REG_ESUBREG
Référence inverse illégale vers une sous-expression. |
REG_EEND
Erreur non-spécifique. |
REG_ESCAPE
Séquence d'échappement invalide. |
REG_BADPAT
Utilisation illégale d'un opérateur du type groupe ou liste. |
REG_ESIZE
La compilation aurait besoin d'un buffer de taille supérieure à 64 Ko. |
REG_ESPACE
Pas assez de mémoire. |
Conformité
POSIX
Voir aussi
regex (7), Manuel Regex GNU
Traduction
Christophe Blaess, 1996-2003.
Poster un commentaire