Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2090 connectés 

  FORUM HardWare.fr
  Programmation
  C

  expression régulière [nouveau problème]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

expression régulière [nouveau problème]

n°1582600
Digaboy
Posté le 04-07-2007 à 20:32:58  profilanswer
 

Bonjour
 
Je souhaite pouvoir faire de la vérification de syntaxe en C. Je me suis donc trouné vers le tutoriel suivant http://nicolasj.developpez.com/articles/regex/
 
Mon problème est le suivant:

  • Je n'arrive pas à trouver les bons fichiers nécésaires à l'instalation de cette librairie. En effet j'ai trouvé plusieurs fichiers "regex.h" tous différents et aucun ne me permet de compiler mon code source.  


Mes questions sont donc les suivantes:

  • Quels fichiers ( s'il y en d'autre nécésaire) dois-je télécharger ?
  • Où puis les téléchargers ? ( google est déjà mon ami mais je n'ai pas trouvé la réponse à mon problème)
  • Où dois mettre les fichiers en questions ?


Voila
 
pS: Je code sous Code Blocks sur Windows XP


Message édité par Digaboy le 26-08-2007 à 23:13:05
mood
Publicité
Posté le 04-07-2007 à 20:32:58  profilanswer
 

n°1599847
Digaboy
Posté le 16-08-2007 à 02:06:56  profilanswer
 

Bonjour
 
Après quelques recherches, j'ai trouvé mon fichier regex.h sur une distrib linux mais lorsque je compile , j'obtiens ce message:
 
Linking console executable: D:\code\jap\test_regexp\console.exe
.objs\main.o:main.c:(.text+0x51): undefined reference to `regcomp'
.objs\main.o:main.c:(.text+0x88): undefined reference to `regexec'
.objs\main.o:main.c:(.text+0x96): undefined reference to `regfree'
.objs\main.o:main.c:(.text+0xf4): undefined reference to `regerror'
.objs\main.o:main.c:(.text+0x12b): undefined reference to `regerror'
 
D'où est ce que cela pourrais venir ??

n°1599899
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-08-2007 à 10:07:10  profilanswer
 

Digaboy a écrit :


Après quelques recherches, j'ai trouvé mon fichier regex.h sur une distrib linux mais lorsque je compile , j'obtiens ce message:
 
Linking console executable: D:\code\jap\test_regexp\console.exe
.objs\main.o:main.c:(.text+0x51): undefined reference to `regcomp'
.objs\main.o:main.c:(.text+0x88): undefined reference to `regexec'
.objs\main.o:main.c:(.text+0x96): undefined reference to `regfree'
.objs\main.o:main.c:(.text+0xf4): undefined reference to `regerror'
.objs\main.o:main.c:(.text+0x12b): undefined reference to `regerror'
 
D'où est ce que cela pourrais venir ??


Il faut lier la bibliothèque correspondante au projet. Je dirais libregex.a, (donc ajouter -lregex à la ligne de commande de l'éditeur de lien) mais c'est un peu au pif...
 
Je relis ton message et... non ! Tu n'as pas fait ça ? Tu as été copier un .h comme ça venant de nulle part et tu l'as mis sur ta machine ? T'es fou ?
 
Il faut installer regex sur ta machine, ce qui installera le[s] .h et la bibliothèque qui va bien (et qu'il faura lier avec ton projet).
 
Par exemple, pour MinGW, il ya un devpak http://devpaks.org/details.php?devpak=67
 
Sauf indication contraire, un .h est spécifique à un environnement. De plus, il ne contient que l'interface des fonctions (même si parfois on a tout avec les macros et autres inline).


Message édité par Emmanuel Delahaye le 16-08-2007 à 10:13:30

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1600160
Digaboy
Posté le 16-08-2007 à 17:49:16  profilanswer
 

Merci pour ta réponse qui ma permis de résoudre mon problème.  
Mais ce qui me parait bizarre c'est que j'avais bien ajouté le fichier libregex.a dans les options de mon linker. Deplus je pensais qu'étant donnée que j'avais le fichier libregex.a, l'ajout d'un fichier regex.h aurait suffit.  
 
Mais passons, voila comment j'ai procédé pour résoudre mon problème :
 
- installations de Rx1.5  dans Code Blocks  
        Plugins -> Dev C++ DevPack Update/installer  
            serveur "devpack.org "
            catégorie "String manipulation"
 
- remplacer #include <regex.h> par #include <rxposix.h>
 
- Project -> Build Option ->linker
     ajouter les fichiers   librx.a    librx.ddl.a         librx.lib
       

n°1604155
Digaboy
Posté le 26-08-2007 à 23:12:37  profilanswer
 

Re - Bonjour
 
Après quelques manipulations d'expressions régulières, je viens de me heurter à un problème.
 
J'ai les chaines suivantes:

  • [TaHiSe]_Bokurano_02_HDTV_[7253DE30]
  • [TaHiSe] Bokurano 02 HDTV [7253DE30]
  • [TaHiSe]Bokurano02[7253DE30]
  • [SnN]_XXX_Holic_07_[3AF3442A]
  • [SnN] XXX Holic 07 [3AF3442A]


J'arrive à récupérer sans problème le nom de la team ( Tahise ou SnN) et le numéro de l'épisode mais je n'arrive pas à récupérer le nom de la série.
J'ai résumé plus haut différentes manière de nommer un fichiers( et donc les contraintes que j'ai). il faut savoir: le nom peut être composé, séparé par des _ ou des espaces, ...
 
Pour récupérer le nom de la team j'ai utilisé la fonction suivante

Code :
  1. char* isoler_team(char* nom)
  2. {
  3.     char * str_regex = "(([[|\\(][[:alnum:]]+[]|\\)])+)";
  4.     regex_t preg;
  5.     int err = regcomp (&preg, str_regex, REG_NOSUB | REG_EXTENDED);
  6.     if (err == 0)
  7.     {
  8.         int match;
  9.         size_t nmatch = 0;
  10.         regmatch_t *pmatch = NULL;
  11.         nmatch = preg.re_nsub;
  12.         pmatch = malloc (sizeof (*pmatch) * nmatch);
  13.         if (pmatch)
  14.         {
  15.             match = regexec (&preg, nom, nmatch, pmatch, 0);
  16.             regfree (&preg);
  17.             if (match == 0)
  18.             {
  19.                 char *site = NULL;
  20.                 int start = pmatch[0].rm_so;
  21.                 int end = pmatch[0].rm_eo;
  22.                 size_t size = end - start;
  23.                 site = malloc (sizeof (*site) * (size + 1));
  24.                 if (site)
  25.                 {
  26.                     strncpy (site, &nom[start], size);
  27.                     site[size] = '\0';
  28.                     return (site);
  29.                 }
  30.             }
  31.             else exit (EXIT_FAILURE);
  32.         }
  33.         else exit (EXIT_FAILURE);
  34.     }
  35. }


 
mais je ne sais pas comment récupérer le nom.
 
Si vous avez des idées
 

n°1604450
bizu53
Posté le 27-08-2007 à 14:41:26  profilanswer
 

Salut pour ma part je ferais tout simplement comme ça :
 

Code :
  1. int i;
  2. ...
  3. i = strchr(nom, ']') - nom + 1;
  4. while(nom[i] != '[')
  5. {
  6.     printf("%c", nom[i]);
  7.     i++;
  8. }


 
En remplaçant le printf par ce que tu veux (avec une petite condition si tu ne veux pas que ça prenne les _ ou espaces s'il y en a)

n°1606017
Digaboy
Posté le 29-08-2007 à 21:41:42  profilanswer
 

a oui c'est pas bête du tout, j'avais tellement la tête dans mes expressions régulières que j'en oublie les bases.

 

Merci bien


Message édité par Digaboy le 29-08-2007 à 21:42:12
n°1606032
zecrazytux
Posté le 29-08-2007 à 22:13:28  profilanswer
 

j'ai pas poussé loin le test mais j'avais essayé les regex PCRE en C (viens de perl)
y a dla doc itou itou


---------------
Blog photo/récits activités en montagne http://planetcaravan.net

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  expression régulière [nouveau problème]

 

Sujets relatifs
Problème avec paginationprobleme d'adresse memoire qui rend fou
Un petit problème qui me pose... souci !probleme fichier téléchargé avec telechargement forcé de php
[resolut] Probleme de compilation avec QtXml[javascript] problème de récursivité
Problème de copier coller de données depuis un classeur fermé.Problème de condition
Batch Probleme Echo sur serveur distantProblème saut ligne RSS => HTML via XSL
Plus de sujets relatifs à : expression régulière [nouveau problème]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR