Salut,
je suis en train de tester les expressions régulières en C. Mon prog est très simple.
C'est un programme de recherche dun mot dans un fichier. Je lui passe un mot et un fichier en paramètre et le prog doit chercher la ligne où se trouve le mot. Jusqu'ici ca marche pour tous les mots sans accent.

Un exemple d'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
2401939@ari-31-305-11:/users/nfs/Etu9/2401939/master/ACI/Work$ ./regexEx salue dico 
pattern = salue
salue trouvé à la ligne 279007
2401939@ari-31-305-11:/users/nfs/Etu9/2401939/master/ACI/Work$ ./regexEx imbécile dico 
pattern = imbécile
Motif non trouvé
2401939@ari-31-305-11:/users/nfs/Etu9/2401939/master/ACI/Work$
Je poste mon code.
Quelqu'un aurait-il une idée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
 
 
void search_in_file(FILE *f, char *pattern){
int cpt;
regex_t *m;
char line[1024];
cpt=0;
 
regcomp(m,pattern,REG_EXTENDED);
 
while((fgets(line,1024 ,f)) != NULL){
 if(regexec(m,line,0,NULL,0) == 0){
   fprintf(stdout,"%s trouvé à la ligne %d\n",pattern,cpt);
   return;   
 }
 cpt++;
}
 
fprintf(stdout,"Motif non trouvé\n");
 
}
 
 
 
 
int main(int argc, char* argv[]){
 
char *pattern;
char *path;
FILE *file;
 
 
if(argc != 3){
 fprintf(stderr,"Usage : regexEx <pattern> <fichier>\n");
 return -1;
}
 
pattern = argv[1];
path = argv[2];
 
if((file = fopen(path,"r")) == NULL){
 fprintf(stderr,"Error while opening the file %s\n",path);
 return -1;
}
fprintf(stdout,"pattern = %s\n",pattern);
search_in_file(file,pattern);
 
fclose(file);
return 0;
}
Je l'ai testé sur ce fichier la.

Quelqu'un aurait-il une idée?