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 :

regex pourtant simple !


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut regex pourtant simple !
    Bonjour,

    Je souhaite compter les lignes qui contiennent un point suivi d'un chiffre mais ne se terminent pas par /

    ça marche bien si je cherche les lignes qui contiennent un point suivi d'un chiffre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if ($ligne =~ m/\.\d/){
      	$compteur++;
    	}
    ça marche bien si je cherche les lignes qui finissent par /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if ($ligne =~ m/\/$/){
      	$compteur++;
      }
    Mais plus rien ne va si je ne veux plus les lignes qui finissent par /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if ($ligne =~ m/\.\d/ and $ligne =~ m/[^\/]$/){
      	$compteur++;
      }
    Pourquoi ?
    Merci par avance

  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
    Ta regex étant correcte, je soupçonne un problème dans les données (un "\n" qui traine ?). Par ailleurs je te conseille de rester le plus simple possible dans tes regex et d'utiliser plutôt les opérateurs booléens dans ce genre de cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($ligne =~ m<\.\d> and $ligne !~ m</$>){
      	$compteur++;
    }
    --
    Jedaï

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Jedai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($ligne =~ m<\.\d> and $ligne !~ m</$>){
      	$compteur++;
    }
    Zzzzzzou ! Pour le !~ j'aurais du y penser. Mais je ne connais pas les <>.
    Je ne les ai pas encore vus dans les cours ou la FAQ. Je vais mieux chercher !...

    Merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par apprenti doc
    Zzzzzzou ! Pour le !~ j'aurais du y penser. Mais je ne connais pas les <>.
    Je ne les ai pas encore vus dans les cours ou la FAQ. Je vais mieux chercher !...

    Merci
    Ma regex ne devait pas être si bonne que ça!
    Je n'ai (encore) rien trouvé concernant les <> dans la FAQ et mon éditeur fait la tête quand je les intègre dans mon programme. Mais en les remplaçant par des // ça fonctionne très bien et j'ai un résultat juste!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      if ($etab and $ligne =~ m/\.\d/ and $ligne !~ m/\/$/){
      	$compteur++;
      }
    Encore merci

  5. #5
    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
    Citation Envoyé par apprenti doc
    Je n'ai (encore) rien trouvé concernant les <> dans la FAQ et mon éditeur fait la tête quand je les intègre dans mon programme.
    Le fait que j'ai choisi <> ici est anecdotique, l'important étant d'utiliser un symbole après le m, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m(/$) ou m|/$| ou m{/$}
    Toute ces formes sont valables (bien que ton éditeur ne les comprenne pas...) et bien pratique parfois pour s'éviter le dit "leaning toothpick syndrom" ( /\/\/\\/ pour matcher "//\"... ) par exemple lorsque l'on doit manipuler du HTML. J'aime particulièrement la forme avec les {} que je trouve plus claire que la forme standard.

    --
    Jedaï

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

Discussions similaires

  1. intercepter une touche clavier, c pourtant simple
    Par xoco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 26/11/2008, 15h50
  2. [RegEx] regex très simple : que des nombres !
    Par rudddy dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2008, 13h02
  3. bloquage sur une requete pourtant simple
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/04/2008, 15h55
  4. [SQL] Problème de requete qui parait pourtant simple
    Par sephirothmana dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/06/2006, 11h02
  5. [RegEx] Regex tout simple
    Par dorian53 dans le forum Langage
    Réponses: 3
    Dernier message: 18/02/2006, 16h44

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