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 :

Probleme expression réguliere


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Par défaut Probleme expression réguliere
    Bonjour,

    Pourriez vous me dire comment je peux faire pour extraire des motifs suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    $toto = "pl apps-mqm-01  apps-mqm     ENABLED  ACTIVE   20480    CONCAT    -        RW" ;
     
            if ( $toto =~ /^pl/ )
            {
            ($plex,$volname,$logno) = ( $toto =~ /pl (.*(-\d+)?)\s+(.+)\s+[A-Z]+ [A-Z]+ ([0-9A-Z]+).*/ ) ;
            print "** $plex** **$volname\n**" ;
            }
    Je n'arrive pas à extraire : apps-mqm-01; apps-mqm; 20480.

    Sachant que apps-mqm-01 peut aussi prendre la forme de 02-apps-mqm01-02.

    Sachant que apps-mqm peut aussi prendre la forme de apps_ae-01mqm_12

    Je recherche une expression "assez" large pour permettre d'extraire ces 2 premiers variable.

    Merci pour votre aide. Ca fait un moment que je me creuse la tête sans résultat.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    cadeau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $toto = "pl 02-apps-mqm01-02  apps-mqm     ENABLED  ACTIVE   20480    CONCAT    -        RW" ;
    my @apm = $toto =~ / (.+?apps\S+)/gi;
    print "@apm\n";

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Par défaut
    Bonjour,

    Merci.

    Désolé. Je me suis mal exprimé. La ligne toto n'a pas forcément "apps" comme contenu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $toto = "pl 8apreps-m-06_qm-01  apps-m56_DR_qm-23     ENABLED  ACTIVE   20480    CONCAT    -        RW" ;
     
     
            if ( $toto =~ /^pl/ )
            {
            ($plex,$volname,$logno) = ( $toto =~ /pl (.+?)\s+(.*?)\s+[A-Z]+\s+[A-Z]+\s+([0-9A-Z]+).*/ ) ;
     
            print "** $plex** **$volname** **$logno**\n" ;
            }
    J'ai comme résultat 8apreps-m-06_qm-01; apps-m56_DR_qm-23; 20480.

    Mais je trouve que mon expression est un peu "moche"

    Est ce que vous pouvez me dire comment je peux faire mieux, j'ai lu avec les référence arriere, mais j'ai un peu de mal.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    faut nous dire ce que tu veux exactement, car c'est en fonction de ta demande que la regex sera ecrite.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Par défaut
    Je veux juste récuperer les champs $2, $3 $6.
    Donc : 8apreps-m-06_qm-01; apps-m56_DR_qm-23; 20480.

    merci

  6. #6
    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
    Dans ce cas, contente toi d'utiliser split :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my $toto = "pl apps-mqm-01  apps-mqm     ENABLED  ACTIVE   20480    CONCAT    -        RW" ;
     
    if ( $toto =~ /^pl/ ) {
            my ($plex,$volname,$logno) = (split /\s+/, $toto)[1, 2, 5];
            print "** $plex** **$volname\n**" ;
    }
    Et apprends à utiliser les pragma "strict" et "warnings", ça t'éviteras beaucoup de problèmes à l'avenir.

    --
    Jedaï

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

Discussions similaires

  1. probleme expressions régulieres
    Par Ganondorf dans le forum Langage
    Réponses: 12
    Dernier message: 14/10/2007, 20h57
  2. Probleme expression réguliere
    Par tarti dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 05/02/2007, 14h31
  3. probleme expression réguliere
    Par guiillaume63 dans le forum Langage
    Réponses: 1
    Dernier message: 28/06/2006, 14h45
  4. Probleme avec expression réguliere
    Par Raideman dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2006, 13h56
  5. [langage] problème expression régulière
    Par chtiboss dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2004, 16h08

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