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

Langage Perl Discussion :

Problème regexp


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut Problème regexp
    Salut,

    J'ai des difficultés à trouver une regexp. Je veux parser un fichier de configuration dont certaines lignes ont le format suivant (espaces en début de lignes, espaces ou tabulation(s) entre le premier mot et la chaîne de caractères) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      host1    'cpu disk'
      host2    'cpu disk mem'
      host3    'disk'
    Le but est d'extraire le mot en début de ligne et la chaîne de caractères entre quotes. A des fins de test, j'étais parti sur ce code (pour le moment, je n'ai pas mis les parenthèses destinées à l'extraction) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open CONF, '<./config_file';
     
    while(<CONF>)
    {
        if(m/\s+\w\s+'(\w\s?)*'/) { print $_; }
    }
     
    close CONF;
    Rien ne s'affiche.

    J'ai décidé de procéder étape par étape, en testant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if(m/^\s+\w/) { print $_; }
    Toutes les lignes souhaitées s'affichent. Par contre, si je rajoute simplement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if(m/^\s+\w\s+/) { print $_; }
    ou même ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if(m/^\s+\w\s/) { print $_; }
    plus rien ne s'affiche... Je ne maîtrise pas les expressions régulières mais jusqu'ici, ça devrait fonctionner... Si une âme charitable pouvait éclairer ma lanterne...

  2. #2
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut
    Errata : dans l'exemple de fichier de conf que je donne, les noms de machines utilisés contiennent des chiffres. Ce n'est pas le cas dans le fichier que j'utilise pour mes test. A terme, j'essaierai de faire évoluer la regexp pour travailler sur les IPs mais vu comme je me galère pour l'instant, ça attendra

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Je pense que c'est un simple petit oubli de ta part, juste une distraction probablement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m/\s+\w+\s+'([\w\s]*)'/
    Tu avais oublié les "+" après les "\w"...

    --
    Jedaï

  4. #4
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Bon, étant donné que je ne connais pas ton fichier, je ne oeux pas savoir si mon expression marche correctemment, néamoins j'ai pensé à ça :
    En tout cas, il match les chaînes que tu m'as donné, quand à savoir si il en match trop...

    €dit : Oups, Jedai trop rapide pour moi, de bons réflexes tu as
    En tout cas nous sommes d'accord sur la regex

  5. #5
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut
    Oh là là, le gros boulet...

    Merci Jedaï, une fois de plus...

    Tant que j'y suis et sans vouloir abuser, pourrais-tu m'aider à remplacer le premier \w+ par quelque chose qui matche indifféremment un FQDN quelconque ou une adresse IP ? :o

  6. #6
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Hum, je dirais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m/\s\w+|[0-9:]+\t'\w* |\s*'/
    Non ?

  7. #7
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut
    Woufeil, merci pour ta réponse, mais je ne comrends pas trop la partie [0-9:]. Il faut intéger un "." à ton ensemble, non ?

  8. #8
    Yux
    Yux est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Par défaut
    Bon, j'utilise ça pour l'IP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m/\s+(\w+|[\d+\.?]*)\s+'(([\w\s\.]*))'/
    Je pense qu'il n'y a plus qu'a rajouter le - pour les noms de machines et ça sera ok. Merci à tous les deux.

  9. #9
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    Oups, j'ai mis : à la place de point pour les ip
    Mouais, je suis fatigué moi.

    Ta version est bonne, pas de problèmes.

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

Discussions similaires

  1. Problème regexp \1
    Par max3513 dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2015, 17h58
  2. problème regexp et accents
    Par umbre42 dans le forum Général Python
    Réponses: 2
    Dernier message: 30/06/2011, 14h14
  3. [RegEx] Problème RegExp, encore un
    Par Ronin dans le forum Langage
    Réponses: 12
    Dernier message: 30/04/2010, 17h26
  4. Problème regexp
    Par L0rent dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/04/2006, 11h59
  5. [regexp] petit problème d'expression régulière
    Par LE NEINDRE dans le forum Langage
    Réponses: 14
    Dernier message: 16/12/2005, 10h33

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