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 :

Chaine, Expressions régulières et affectation à variable


Sujet :

Langage Perl

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Chaine, Expressions régulières et affectation à variable
    bonjour,
    je débute en perl, avec un peu d'expérience en php

    j'ai un texte qui mentionne quelque part
    Lettres à Elise 1994 21 novembre 2002 On m'a dit que tu as un nouveau chat etc...

    Je voudrais isoler Lettres à Elise 1994
    Pour décortiquer l'info, j'ouvre une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($ligne='~s/Lettres à Elise \d*/') {
    $ref= \d*;
    print $ref;}
    Ca ne marche pas. Je voudrais récupérer le nombre 1994. Je suis conscient que c'est tout simple, mais je démarre, et je cale déjà. Merci de votre aide,

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il y a de multiples problèmes dans le code montré:
    1) syntaxe de l'opérateur =~ : l'apostrophe en plein milieu n'a pas lieu d'être
    2) le s/ n'a pas lieu d'être non plus pour une simple recherche de motif sans remplacement
    3) pour capturer un motif, il faut utiliser des parenthèses capturantes
    4) pour récupérer les motifs capturés il faut utiliser les variables $1, $2 etc...

    En corrigeant ces points, ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($ligne =~ /Lettres à Elise (\d*)/) {
     print $1;
    }
    Pour aller plus loin, il y a par exemple ce tutoriel:
    http://perl.enstimac.fr/DocFr/perlretut.html

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Résolu
    merci Estofilo!
    c'est un sacré coup de main. Je me suis un peu emmêlé les pinceaux dans mon code parce que j'ai essayé de simplifier au max ma question,
    je peux à présent me remettre au boulot,
    merci pour le lien vers le tuto,

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Une méthode équivalente à celle de estofilo qui évite d'utiliser les variables à effets de bord $1, $2, ... mais d'utiliser une variable my à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (my ($annee) = $ligne =~ /Lettres à Elise (\d*)/) {
     print $annee;
    }

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

Discussions similaires

  1. Couper une chaine expression régulière
    Par stratocasters dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 28/06/2012, 18h08
  2. Expression régulière - récupérer les variables $1 $2
    Par fleurparis dans le forum VBScript
    Réponses: 2
    Dernier message: 16/12/2009, 17h20
  3. nettoyer une chaine & Expression régulière
    Par jumbay dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/10/2008, 10h18
  4. Réponses: 11
    Dernier message: 24/03/2006, 12h12
  5. Réponses: 7
    Dernier message: 27/10/2005, 20h23

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