salut à tous,
j'ai un probléme d'extraction de nom à partir d'un email.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <regex.h>
 
int main(void) {
   char *Chaine = NULL;
 
   regex_t MotifCompile;
   regmatch_t *TableauSousExpressions = NULL;
   const char *Motif = "^\\b([0-9A-Za-z_-]*)@{1}[0-9A-Za-z_-]{2,15}\\.[A-Za-z]{2,3}\\b$";
   char *MessageErreur = NULL;
   int ErreurRegex,LongeurMaxMsgErreur,NombresSousChaines,ErreurComparaison,LongueurSousChaine,Compteur;
 
 
   assert(Chaine == NULL);
   Chaine = (char*)malloc(256);
   if (Chaine == NULL) {
     perror("malloac");
     exit(1);
   }
 
   fgets(Chaine,256,stdin);
 
   ErreurRegex = regcomp(&MotifCompile,Motif,REG_EXTENDED | REG_NEWLINE);
   if (ErreurRegex != 0) {
     LongeurMaxMsgErreur = regerror(ErreurRegex,&MotifCompile,NULL,0);
     assert(MessageErreur == NULL);
     MessageErreur = (char*)malloc(LongeurMaxMsgErreur);
     if (MessageErreur == NULL) {
       perror("malloc");
       exit(1);
     }
     regerror(ErreurRegex,&MotifCompile,MessageErreur,LongeurMaxMsgErreur);
     fprintf(stderr,"Erreur : %s\n",MessageErreur);
 
     assert(MessageErreur != NULL);
     free(MessageErreur);
     MessageErreur = NULL;
     exit(1);
   }
   NombresSousChaines = MotifCompile.re_nsub + 1;
   fprintf(stdout,"Nombre sous chaînes  = %d\n",NombresSousChaines);
   assert(TableauSousExpressions == NULL);
   TableauSousExpressions = (regmatch_t*)malloc(NombresSousChaines*sizeof(regmatch_t));
   if (TableauSousExpressions == NULL) {
     perror("malloc");
     exit(1);
   }
   ErreurComparaison = regexec(&MotifCompile,Chaine,NombresSousChaines,TableauSousExpressions,REG_NOTEOL);
   if (ErreurComparaison == REG_ESPACE) {
     fprintf(stderr,"Erreur fatale\n");
     exit(1);
   }
   if (ErreurComparaison == REG_NOMATCH) {
     fprintf(stderr,"pas de correspondance.\n");
     exit(1);
   }
 
   for (Compteur = 0 ; Compteur < NombresSousChaines; Compteur++) {
     LongueurSousChaine = TableauSousExpressions[Compteur].rm_eo - TableauSousExpressions[Compteur].rm_so;
     fprintf (stdout,"Correspondance = %s\n",(char*) (Chaine+TableauSousExpressions[Compteur].rm_so));
   }
 
 
   assert(TableauSousExpressions != NULL);
   free(TableauSousExpressions);
   TableauSousExpressions = NULL;
   NombresSousChaines = 0;
   regfree(&MotifCompile);
 
   assert(Chaine != NULL);
   free(Chaine);
   Chaine = NULL;
 
   return(0);
}
ça donne :


pourtant j'ai mémorisé la partie regex avec les parabthèses :
([0-9A-Za-z_-]*)
merci d'avance


je veux afficher :
nom_prenom-266