#include
#include
#include
const char * chaine = "Fourmond:Sophie:07-28-2004"
":02-14-2005:";
char chaineFinale[200] = "";
int main()
{
char tampon[200]; char cap[3][30];
regex_t RE; regmatch_t m[4];
int depart = 0;
printf("Chaine initiale: %s\n",chaine);
regcomp(&RE,"([0-9]{2})-([0-9]{2})-([0-9]{4})",
REG_EXTENDED );
/* On verifie la presence de dates */
if(regexec(&RE,chaine,0,NULL,0))
printf("Pas de dates !\n");
while(! regexec(&RE,chaine+depart,4,
m,0)) {
int i;
/* On rajoute le 0 final dans tampon */
tampon[0] = 0;
/* On affiche les dates trouvees: */
strncat(tampon,chaine+depart+m[0].rm_so,
m[0].rm_eo - m[0].rm_so);
printf("Date trouvee: %s\n",tampon);
/* On ajoute tout ce qui a ete trouve avant la
correspondance dans chaineFinale; on
utilise strncat pour ne copier que les
premiers caracteres et non toute la
chaine. */
strncat(chaineFinale, chaine+depart,
m[0].rm_so);
/* On copie les groupes captures dans cap: */
for(i = 0; i< 3; i++){
/* On cree une chaine vide finie par un zero
dans cap[i]; c'est requis par strncat.*/
cap[i][0] = 0;
/* On copie avec strncat: */
strncat(cap[i], chaine+depart+
m[i+1].rm_so,m[i+1].rm_eo -
m[i+1].rm_so);
}
/* Maintenant, cap[i] contient le i+1-ieme
groupe capture:*/
printf("Annee: %s\n",cap[2]);
/* On prepare la chaine de remplacement dans
tampon:*/
sprintf(tampon,"%s.%s.%s",
cap[1],cap[0],cap[2]);
/* On la rajoute dans la chaine finale:*/
strcat(chaineFinale,tampon);
/* On met a jour depart */
depart += m[0].rm_eo;
}
/* Finalement, on copie la fin de chaine dans
chaineFinale: */
strcat(chaineFinale, chaine+depart);
printf("Chaine finale: %s\n",chaineFinale);
}
|
|