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 :

[langage] [Débutant][Expression rationnelle] moi pas comprendre


Sujet :

Langage Perl

  1. #1
    Invité(e)
    Invité(e)
    Par défaut [langage] [Débutant][Expression rationnelle] moi pas comprendre
    Bonsoir
    un petit problème avec un expression rationnelle :
    voici le motif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $motif= "(\[[0-9:]{8})\] Finished a frame \((.*)\)";
    voici le genre de phrase que je veux detecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $v = '[02:58:25] Finished a frame (226)';
    si je tape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($x,$y) = ($v=/$motif/);
    j'ai alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $x = '02:58:25'
    $y = '(226)'
    Quel est le problème me direz vous ? bah si on regarde de près le motif, on remarque que les premieres () et les \[ \] sont mal imbriquées : (\[ )\] donc je devrai théoriquement (si j'ai bien compris) avoir le premier crochet dans $x

    dans $y, le cas inverse se présente : j'aimerai bien me passer des (), mais je n'y arrive pas.

    Quelqu'un verrait il où j'ai fait un erreur ?

    Merci
    Mabu

  2. #2
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    C'est à cause de la double passe : il y a d'abord une passe quand tu définis $motif, qui contient en fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "([[0-9:]{8})] Finished a frame ((.*))"
    Puis ensuite une seconde passe lorque tu veux faire matcher ton $v avec $motif... Par contre là j'éviterais les interprétations parce que je ne suis pas sûr de comprendre comment marche la première partie de ta regex (je veux dire la véritable première partie de $motif, pas celle que tu croyais avoir mis !).

    Pour éviter cela, il est préférable d'utiliser les métaquotes de regexs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $motif = qr/\[([0-9:]{8})\] Finished a frame \((.*)\)/;
    Ainsi ça marche (et en plus la regex est précompilée, c'est plus rapide si on l'emploie 10 000 fois) !

    --
    Jedaï

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bon j'ai pas compris toute la théorie, mais la pratique fonctionne très bien
    merci beaucoup

    Mabu

Discussions similaires

  1. Javascript sur facebook (JBSJ), moi pas comprendre ^^
    Par Nephtys dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/03/2009, 11h29
  2. [RegEx] expressions rationnelles marche pas
    Par teramp3 dans le forum Langage
    Réponses: 1
    Dernier message: 05/02/2008, 17h29
  3. comparaison de chaines - Moi pas comprendre
    Par Laurent68 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/11/2006, 14h49
  4. Generics... moi pas comprendre qqch
    Par ®om dans le forum Langage
    Réponses: 13
    Dernier message: 23/05/2006, 13h17
  5. [langage] Expressions rationnelles (perl/C)
    Par ma2th dans le forum Langage
    Réponses: 11
    Dernier message: 02/08/2004, 18h07

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