Tom's Guide > Forum > Programmation > extraire plusieurs sous chaine d'un string en C

extraire plusieurs sous chaine d'un string en C

Forum Programmation : extraire plusieurs sous chaine d'un string en C

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour,

Le programme tout à la fin de cette page(comment extraire une sous chaines) m'interresse beaucoup.

Sauf que moi j'aimerais extraire plusieurs sous chaine grace à l'expression regulière (par exemple avec le motif "([a-z]+)" ).

J'essaye de mettre un for(i=0;pmatch[i];i++) dans la 4e partie mais ça ne fonctionne pas

Merci d'avance pour votre aide


Message édité par Ceubex le 11-11-2007 à 22:40:13
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

salut, quel programme?

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

tu veux faire un parser d'expression régulière ?

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Lol oui excusez moi dans le feu de l'action j'ai oublié de mettre l'adresse de la page. Ca pourrai s'averer utile lol
http://nicolasj.developpez.com/articles/regex/

Répondre à Ceubex

suffit d'appeler la fonction avec une chaine différente:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <regex.h>
  5. int main (void)
  6. {
  7.   int err;
  8.   regex_t preg;
  9.   const char *str="chaine sous chaine sous  chaine toto";
  10.   const char *str_regex="(sous +chaine)";
  11.   err = regcomp (&preg, str_regex, REG_EXTENDED);
  12.   if (err == 0)
  13.   {
  14.     int match;
  15.     size_t nmatch = 0;
  16.     regmatch_t *pmatch = NULL;
  17.     char *buffer;
  18.     nmatch = preg.re_nsub;
  19.     printf ("taille: %d\n", nmatch);
  20.     pmatch = malloc (sizeof (*pmatch) * nmatch);
  21.     if (!pmatch)
  22.     {
  23.       fprintf (stderr, "Memoire insuffisante\n" );
  24.       exit (1);
  25.     }
  26.     buffer = (char *) str;
  27.     match = regexec (&preg, buffer, nmatch, pmatch, 0);
  28.     while (match == 0)
  29.     {
  30.       char *str_found = NULL;
  31.       size_t size ;
  32.       int start, end;
  33.       start = pmatch[0].rm_so;
  34.       end = pmatch[0].rm_eo;
  35.       size = end - start;
  36.        
  37.       str_found = malloc (sizeof (*str_found) * (size + 1));
  38.       if (str_found)
  39.       {
  40.           strncpy (str_found, &buffer[start], size);
  41.           str_found[size] = '\0';
  42.     printf ("%s\n", str_found);
  43.     free (str_found);
  44.       }
  45.       match = regexec (&preg, (buffer += end), nmatch, pmatch, 0);
  46.     }
  47.     regfree (&preg);
  48.     free (pmatch);
  49.   }
  50.   return 0;
  51. }


Message édité par coca25 le 12-11-2007 à 19:37:58
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

Ca marche super bien.
Merci infiniment, tu m'a sorti une bel epine du pied

Répondre à Ceubex
Tom's Guide > Forum > Programmation > extraire plusieurs sous chaine d'un string en C
Aller à :

Il y a 2342 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens