IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Expressions régulières en langage C


Sujet :

C

  1. #1
    Membre à l'essai
    Affffff
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations professionnelles :
    Activité : Affffff

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut Expressions régulières en langage C
    Bonjour à tous!

    Je développe un projet en C et j'ai besoin de reconnaître une certain format de
    chaîne de caractères. Je me suis donc tourné vers les expressions régulières.

    Voici un exemple de chaîne que je veux reconnaître: "[(3)(2)(0)(7)]".
    J'ai donc écrit cette regex:
    "^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$"

    Cependant, la reconnaissance ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            #include <sys/types.h>
    	#include <regex.h>
    		.
    		.
    		.
    	const char regex_str[] = "^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$";
    	regex_t *atom_mbr_regex = malloc(sizeof(regex_t));
    		.
    		.
    		.
    	regcomp(atom_mbr_regex, regex_str, REG_EXTENDED);
    	regexec(atom_mbr_regex, "[(3)(2)(0)(7)]", 0, NULL, 0);
    regexec me retourne: "No match". J'ai même essayé toutes les combinaisons de drapeaux mais sans succès.

    J'ai pourtant testé avec bash dans le terminal et aussi en PHP; la reconnaissance marche parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ echo "[(3)(2)(0)(7)]" | grep -E "^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$"
    //dans le terminal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("#^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$#", "[(3)(2)(0)(7)]");
    //dans un script PHP

    Je serais très enchanté qu'on me montre là où je me suis trompé (ou bien s'il y a un bug) pour que je puisse progresser dans mon projet.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 448
    Par défaut
    Bonjour et bienvenue.

    C'est dû au fait que les antislashes d'échappement que tu utilises à la ligne 7 sont eux-mêmes « échappés » par le langage C lui-même, qui les utilise pour coder ses propres caractères spéciaux. Il faut donc doubler tous les antislashes de cette ligne et ça devrait rentrer dans l'ordre.

  3. #3
    Membre à l'essai
    Affffff
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations professionnelles :
    Activité : Affffff

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Par défaut Thanks
    C'était bien ça, merci beaucoup.

    J'ai essayé avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "^\\[(\\(-?[0-9]+(\\.[0-9]+)?\\)){2}\\([0-9]\\)\\(-?[0-9]+(\\.[0-9]+)?\\)\\]$"
    Désormais je ferais plus attention au warnings de cc!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Théorie des Langages et Compilation: Expressions Régulières.
    Par ByteCode07 dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 29/01/2013, 16h52
  2. Algo/pascal : Génération d'un langage correspondant à une expression régulière
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/02/2007, 12h17
  3. Automates et langages (AFN <-> expression régulière)
    Par slim dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 14/06/2005, 21h52
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo