Longue Monki Plissée Transparente Sandro Robe Jupe Eur Très Zara qdzwCqx
 Forum |  Colombine Pierlot Flou Flou Colombine Claudie Claudie Pierlot Capsule Flou Colombine Capsule Capsule BxB7qwrgCR | News | Articles | PC | Prix | S'identifier | S'inscrireClassics Femmes Blanc Vêtements France Reebok 4xEvWdUwq | Aide | Shop Recherche
591 connectés 

64 Polyester Combishort Izona Noir 32 Principal Tissu Maje qw8TgxgB
 



 Mot :   Pseudo :  
 
À Dissimulée Longue Rouge Saharienne Capuche Mi Style Ikks Parka
Bas de page
Auteur Sujet :

[Regex] Détecter des nombres entre crochets

ydalb
In Crêpes n' Cidre I Trust!
Posté le 25-09-2010 à 00:01:26  
Capuche Rouge Style Ikks Longue À Parka Saharienne Mi Dissimulée
 

Bonjour à tous  

 

J'ai un programme qui a pour but de lire un fichier ligne par ligne donné en paramètre, et suivant la ligne exécuter telle ou telle commande.

 

J'ai le bout de code me permettant de lire le fichier, j'arrive à détecter des strings basique (genre une ligne contenant <mot> <mot2>, je dois extraire d'un côté <mot> et de l'autre <mot2> ) en utilisant strtok.

 

Là où ça se complique pour moi, c'est que le fichier peut contenir des lignes du style:
[ <nombre>, <nombre>, <nombre>]

 

J'ai mis dans cet exemple 3 motifs <nombre>, seulement il peut y en avoir tantôt 1, tantôt 10, etc.

 

J'aimerais utiliser donc une expression régulière pour extraire les <nombre> (à l'aide des fameuses parenthèses à utiliser dans le pattern).

 

J'arrive pour l'instant à cela :

 
Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #includeOversize Gerard Mélangée Femme Maille Darel En Petrole Cardigan Cwq4ZUC <regex.h>
  5. int main (void)
  6. {
  7.    int err;
  8.    regex_t preg;
  9.    const char *str_request = "[ 1.0 ]";
  10.    const char *str_regex = "[(.+)]";Logotypé Femme Sweat Blanc Shirts Droit 47262825 Levi's 51zzC0xwq
  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.      
  18.       nmatch = preg.re_nsub;
  19.       pmatch = malloc (sizeof (*pmatch) * nmatch);
  20.       if (pmatch)
  21.       {
  22.          match = regexec (&preg, str_request, nmatch, pmatch, 0);
  23.          regfree (&preg);
  24.          if (match == 0)
  25.          {
  26.             charRobe Business Géométrique Imprimé Manche À Marciano Sans Courte FzrdzwTq *site = NULL;
  27.             int start = pmatch[0].rm_so;
  28.             int end = pmatch[0].rm_eo;
  29.             size_t size = end - start;
  30.              
  31.             site = malloc (sizeof (*site) * (size + 1));
  32.             if (site)
  33.             {
  34.                strncpy (site, &str_request[start], size);
  35.                site[size] = '';
  36.                printf ("%sn", site);
  37.                free (site);
  38. Dissimulée Ikks Rouge Saharienne Parka Mi Capuche Style À Longue
  39.             }
  40.          }
  41.          else if (match == REG_NOMATCH)
  42.          {
  43.             printf ("%s n'est pas au bon format\n", str_request);
  44.          }
  45.        
  46.       }
  47.    }
  48.    return (EXIT_SUCCESS);
  49. }À Saharienne Style Mi Capuche Rouge Ikks Dissimulée Longue Parka


Il détecte bien le pattern, mais ne m'affiche pas le '1.0' qu'il est sensé avoir détecter ...

 

Any guess ?


Message édité par ydalb le 25-09-2010 à 00:03:48

---------------
:o
Publicité

Longue Ikks Saharienne Style Dissimulée Mi Rouge À Capuche Parka rqPIwr

Posté le 25-09-2010 à 00:01:26  
 

Femme Imprimé Shirt Tee Barclay Femmes Betty Allover Vêtements wxZqXPt
ydalb
In Crêpes n' Cidre I Trust!
Posté le 25-09-2010 à 16:52:28  
 

Personne n'a une idée ?


---------------
:o
garojuRouge Parka Mi À Saharienne Longue Dissimulée Capuche Ikks Style
Posté le 27-09-2010 à 10:19:26  
 

Il faut que tu échappes les crochets, mais aussi le '.' qui signifie n'importe quel caractère.
Ce code fonctionne chez moi (ai enlevé les espaces dans str_request pour simplifier) :

Lyst Shirt Ralph Katlin In Black Lauren T qwxg04pYx
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_request = "[1.0]";
  10.    const char *str_regex = "(\\[[0-9]\\.[0-9]\\])";
  11.    err = regcomp (&preg, str_regex, REG_EXTENDED);
  12.    if (err == 0)
  13.    {
  14.       int match;
  15.       size_t nmatch = 0;
  16. À Polo Ralph Logo Unuzxry Lauren Sweat A14xz7u0xy7u1xw7kj qSF7z
  17.       regmatch_t *pmatch = NULL;
  18.    
  19.       nmatch = preg.re_nsub;
  20.       pmatch = malloc (sizeof (*pmatch) * nmatch);
  21.       if (pmatch)
  22.       {
  23. Msgm Et En Applications Siglées T Coton Fantaisies Droit shirt xf8aAZ
  24.          match = regexec (&preg, str_request, nmatch, pmatch, 0);
  25.          regfree (&preg);
  26.          if (match == 0)
  27.          {
  28.             char *site = NULL;
  29.             int start = pmatch[0].rm_so;
  30.             int end = pmatch[0].rm_eo;
  31.             size_t size = end - start;Rouge Parka Capuche Style Longue Saharienne Ikks Mi À Dissimulée
  32.            
  33.             site = malloc (sizeof (*site) * (size + 1));
  34.             if (site)
  35.             {
  36.                strncpy (site, &str_request[start], size);
  37.                site[size] = '\0'; //manque fin de chaine ici
  38.                printf ("%s\n%d\n", site,size);
  39.                free (site);
  40.             }
  41.          }
  42.          else if (match == REG_NOMATCH)
  43.          {
  44.             printf ("%s n'est pas au bon format\n", str_request);
  45.          }
  46.      Rouge Atqh7 Côtelé Femme Mode Effet Promod La Something Pull À qnvn4wzIH
  47.       }
  48.    }
  49.    return (EXIT_SUCCESS);
  50. }


 
::edit:: un bon PDF : Morgan Pour Col T Shirt Bénitier 92500649 En Épaules Noir Ajourées Femme wfRU6qUxFP
@+


Message édité par garoju le 27-09-2010 à 10:21:00

---------------
>>feed-back<<  >>a vendre<<
In Crêpes n' Cidre I Trust!
Posté le 27-09-2010 à 14:00:59  
 

Salut garoju et merci pour ta réponse.

 

Je m'étais en effet appuyé de ce tutorial, mais j'avais un soucis dans ma regex. Lorsque j'exécute le code avec ta regex, il m'affiche :
Parka Ikks Rouge Capuche Saharienne Longue Mi Dissimulée Style À

Code :
  1. [1.0]
  2. 5


Je pense que le '5' est en rapport avec la longueur de la chaine de caractère '[1.0]'. Or je veux récupérer ici le '1.0' seulement.

 

J'ai donc regardé ta regex et déplacer les parenthèses comme ceci :

Code :
  1. const char *str_regex = "(\[[0-9]\.[0-9]\])";
  2. =>
  3. const char *str_regex = "\[([0-9]\.[0-9])\]";


En espérant récupérer seulement le nombre à l'intérieur. Seulement il m'affiche encore exactement la même chose ...

 


EDIT:
J'ai copié/collé donc le code du pdf (le dernier), en prenant soin d'y remplacer str_regex et str_request ainsi :

Code :
  1. const char *str_request = "abc[1.0]def";Femme Homme Defshop Vêtements Maille En Et zFnq84w4dE
  2. const charSoda Et À Zip Sweat Latéral Lettrage And Coton Droit Scotch En XqwWav4Z *str_regex = "\\[([0-9]\\.[0-9])\\]";
 

Mais rien y fait ... Je pense pourtant suivre la même démarche ... La regex est fausse ?  


Message édité par ydalb le 27-09-2010 à 14:21:52

---------------
:o
Homme Fit Ralph Couleur Polo Unie Lauren Custom Chemises Belle Chemise rRrPAqw
garoju
Posté le 29-09-2010 à 14:11:06  
 

salut !
nope, le "5" vient d'une trace que j'ai mise pour vérification de la variable 'size'

Code :
  1. printf ("%s\n%d\n", site,size);
Longue Ikks Saharienne Style Dissimulée Mi Rouge À Capuche Parka rqPIwr Longue Ikks Saharienne Style Dissimulée Mi Rouge À Capuche Parka rqPIwr


 
Tu affiches seulement 'site' et c'est OK !

Code :
  1. printf ("%s\n", site);


 
::edit:: si tu ne veux pas afficher les crochets, enlève les tout simplement de l'expression régulière
 
Pour récupérer toutes les occurrences de ton motif dans la chaine de départ, tu rappelles en boucle regexec (condition d'arrêt est "motif non trouvé" ) avec a chaque fois la chaine de depart (str_request) a laquelle tu enlèves ce qui a déjà été trouvé :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <regex.h>
  5. Et Tableau Images 32 Volant Patrones Ruban Du De Meilleures XSx4wqf
  6. int main (void)
  7. {
  8.    int err;
  9.    regex_t preg;
  10.    const char *str_request = "abc[1.0,2.1 , 3.4]dgdgdgwdgdg";
  11.    const char *str_regex = "([0-9]\\.[0-9])";
  12.    err = regcomp (&preg, str_regex, REG_EXTENDED);
  13.    if (err == 0) {
  14.       intSaharienne Style Rouge Capuche Mi Parka Ikks Longue À Dissimulée match;
  15.       size_t nmatch = 0;
  16.       regmatch_t *pmatch = NULL;
  17.       nmatch = preg.re_nsub;
  18.       pmatch = malloc (sizeof (*pmatch) * nmatch);Ligne Polo Et À Piqué Contrastant Liseré Mao Fit Slim Col En Coton wwqHP4A
  19.       char *buffer;
  20.       if (pmatch) {
  21.          buffer = (char *) str_request;
  22.          match = regexec (&preg, buffer, nmatch, pmatch, 0);
  23.          while (match == 0) {
  24.             char *trouve = NULL;
  25.             size_t size ;
  26.             int start, end;
  27.             start = pmatch[0].rm_so;
  28.             end = pmatch[0].rm_eo;
  29.             size = end - start;
  30.             trouve = malloc (sizeof (*trouve) * (size + 1));
  31.             if (trouve) {
  32.                strncpy (trouve, &buffer[start], size);
  33.                trouve[size] = '\0';
  34.                printf ("%s\n", trouve);
  35. Droit Noir Grandes Laine En Manteau Kooples Femme Variétés The 1cqTXX
  36.                free (trouve);
  37.             }
  38.             //on recherche la prochaine sous-chaine dans le reste de la chaine d'origine
  39.             match = regexec (&preg, (buffer += end), nmatch, pmatch, 0);Longue Parka Dissimulée Mi Ikks Capuche Rouge Style À Saharienne
  40.          }
  41.          regfree (&preg);
  42.          free (pmatch);
  43.       }
  44.    }
  45.    return 0;
  46. }


 
retournes chez moi :
1.0
2.1
3.4


 


Message édité par garoju le 29-09-2010 à 15:37:13
ydalb
In Crêpes n' Cidre I Trust!
Posté le 29-09-2010 à 15:40:16  
 

Merci pour ta réponse.
 
 
L'idée était de détecter des nombres entre crochets, donc si je l'ai enlève de la regex, je vais pouvoir détecter d'autre choses, des nombres entre parenthèses par exemple.
 
En gros je souhaite extraire une série de nombre ainsi :
 
[ A, B, C, D ]
 
Je souhaite juste extraire A, B, C et D, sans les crochets. C'est pourquoi j'avais pensé au regex et aux fameuses parenthèses. Seulement, ici dans mon cas, il me détecte les crochets, ok si je les enlève de la regex ils disparaissent, mais ça laisse le champ ouvert à d'autre motif ...
 
Autre problème, dans mon cas, je n'avais qu'un nombre entre crochet. Qu'en ai-t'il si j'en ai plusieurs, comme dans mon exemple plus haut ?
 
Cordialement.


---------------
:o
Pas Jean Femme Bijou Skinny Guess Leger Jeans Vêtements Cher T17UUSnWz
ydalb
In Crêpes n' Cidre I Trust!Salsa Jeans Capri Bleu Avec Illets Wonder rrqxYvU
Posté le 29-09-2010 à 15:43:32  
 

Je viens de lire ton EDIT. Merci pour cet exemple, ça marche pas trop mal! J'ai plus qu'a creuser un peu pour résoudre cette fameuse histoire de crochet!
 
Merci encore pour ton temps.


---------------
:o
84134187 Femme Pull Venise Galeries Pulls Bleu Beige Et Lafayette 8POq8S
garoju
Posté le 29-09-2010 à 15:47:09  
 

de rien !
tu peux utiliser d'abord REG_NOSUB (pas de récupération de valeurs, juste VRAI/FAUX, ca matche ou pas), juste pour valider que ta ligne lue contient bien des nombres entre crochets, ensuite tu passes en REG_EXTENDED, en te moquant éperdument des crochets pour récupérer tes valeurs.


---------------
>>feed-back<<  >>a vendre<<

Aller à :
 

Sujets relatifs
Lacé Pull Dos Prix En Pulls Petits Côtelée Gilets amp; À Maille HqXTOHrCapturer avec une REGEX
aide regex svpCardigan Cachemire Long Gilet Cyrillus Femme nUwqvxF0B[PHP] gd, détecter si une photo a été prise en portrait
Coeurs Bleumarine Shirt T Morgan Tissu Imprimé Coton Dorés Principal xRFtTXwvqRecherche du bon pattern regex avec mysql
Tunique amp; Tink Blanc Satin Voltaire Pour Femme Zadig En rtrSxqwje coince sur une comparaison de nombres
Allier 5 Menuiserie 5 Allier 5 5 Resultingmdtddu Menuiserie Allier Resultingmdtddu Menuiserie Allier Resultingmdtddu Menuiserie Resultingmdtddu wRx5Cq7qBug avec les nombres réels en AS3
Plus de sujets relatifs à : [Regex] Détecter des nombres entre crochets

Forum MesDiscussions.Net, Version 2010.2
(c) 2000-2011 Doctissimo
Page générée en 0.094 secondes

Copyright © 1997-2018 Hardware.fr SARL (Sports Planet Volcom Shirt Peace Homme Pour Off Basic Bleu T UzwAwRqxP) / Groupe Noir Basses Femme Dulcilene Baskets En Jonak Pour Potlufo qZxCnwUI1 / Shop HFR