Dilib, module RegExp, fonction RegExpExtract
Module RegExp |
La fonction RegExpExtract retourne une copie de la partie reconnue par une expression régulière.
Liste des modules Dilib
|
Synopsis
#include "RegExp.h"
char *RegExpExtract ( RexExp* re, char *str );
- Paramètres
RexExp* re
est une expression régulière compilée par RegExpCreate.char *str
est la chaîne à analyser.
Description
La fonction RegExpExtract analyse une chaîne de caractère str
à l'aide d'une expression régulière préalablement compilée par RegExpCreate.
Elle retourne :
- la valeur NULL si l'expression n'est pas reconnue,
- une copie de la sous-chaine reconnue.
Elle positionne deux variables globales :
- RegExpLoc1 : est un pointeur vers le début de la partie reconnue dans
str
. - RegExpLoc2 : pointe vers le caractère qui suit la partie reconnue dans
str
.
Attention
Chaque appel de RegExpExtract crée une nouvelle chaîne. Il convient donc de la libérer par un free().
Exemple
Impression de tous les graphies contenant « philolog » dans une flux HFD.
Pour pouvoir faire facilement des énumérations, le programme génère des triplets contenant :
- la chaîne reconnue,
- la clé HFD,
- un numéro d'ordre (numMatch).
#include "Buffer.h"
#include "RegExp.h"
#include <stdio.h>
#include <string.h>
int main()
{
RegExp *rePhilo;
Buffer *bufDoc;
Buffer *bufKey;
rePhilo=RegExpCreate("[A-Za-z]*[Pp][Hh][Ii][Ll][Oo][Ll][Oo][Gg][A-Za-z]*");
bufDoc=BufferCreate(1000,1000);
bufKey=NewBuffer();
while (BufferGets(bufDoc))
{
char *posTab;
char *match;
char *beginToParse;
int numMatch;
posTab=strchr(BufferString(bufDoc), '\t');
if (posTab)BufferStrncpy(bufKey, BufferString(bufDoc), posTab-BufferString(bufDoc));
beginToParse=BufferString(bufDoc);
numMatch=0;
match=RegExpExtract(rePhilo, beginToParse);
while (match)
{
numMatch++;
printf("%s", match);
free (match);
if (posTab)
{
printf("\t%s\t%d\n", BufferString(bufKey), numMatch);
}
else putchar('\n');
beginToParse=RegExpLoc2;
match=RegExpExtract(rePhilo, beginToParse);
}
}
exit(EXIT_SUCCESS);
}
Si le source est rangé dans un fichier « findPhilolog », la compilation se fait ainsi :
gcc findPhilolog.c $DILIB_CC -o findPhilolog
Voir aussi
Sur Wicri/Manuel, l'exemple donné sur cette page sert de base à un tutoriel sur l'extraction de graphies dans un corpus.