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] Problème d'expression régulière


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut [langage] Problème d'expression régulière
    Bonjour
    J'ai un un fichier du type

    TOTO
    ...
    TATA
    TOTO
    ...
    TATA
    TOTO
    ...
    TATA
    TOTO
    ...
    TATA
    Je récupère tout dans $section

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($section=~/TOTO\n(.*)\n+(^(?!TATA).*\n)+/gm)
    {
    $resultats = $&;
    }
    Le problème c'est que $resultat contient tout du premier TOTO au dernier TATA.
    Comment le rendre paresseux pour qu'il s'arrete au premier TATA ?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Le truc que j'utilise c'est le "?" (et j'ai mis un moment à trouver)
    Il permet de s'arrêter à la première occurence.
    Exple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $string="toto blabla titi blabla tata blabla tata blabla";
    $string =~ /(.+?)tata.+/;
    print $1;
    Avec le point d'interrogation on a "toto blabla titi blabla" (1ere occurence de tata est pris en compte)
    Sans le point d'interrog on a "toto blabla titi blabla tata blabla" (dernière occurence de tata est pris en compte)

    J'espère que ca t'aidera.

  3. #3
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Il sert à quoi ton ! dans ton expression ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Merci ça marche mais j'ai quand même un problème

    while ($section=~/TOTO\n(.*)\n+(?!(TATA))+?/gm)

    Dans $1 il ne me récupère que la ligne1 après TOTO alors qu'il y a plusieurs lignes et si je lui mets

    while ($section=~/TOTO\n(.*\n)+(?!(TATA))+?/gm)

    Dans $1 il me met tout le fichier


    Comment je dois lui dire pour qui me recupère dans $1, toutes les lignes contenues entre TOTO et TATA suivant ?

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    J'ai un peu de mal avec ta regexp.

    Je pose la meme question que Jeh: a quoi sert le "!" ?

    J'ai essayé ca, qui m'extrait bien toutes les lignes entre TOTO et TATA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $section=~/TOTO\n([\w\d\n]+?)TATA/;

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Merci les gars

    Je suis désolé ta solution ne marche pas

    Je sais pas trop à quoi sert le ! sans ça ne marche plus j'ai suivi un script inscrit dan le Oreilly ils disent que c'est pour aller jusqu'à l'expression.

    Je sais pas comment faire mais bon je vais trouver (j'espère)

    C'est bizarre parce que parser du HTML je pensais que c'était facile

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 52
    Points : 54
    Points
    54
    Par défaut
    Bon j'ai encore une idee, peut etre...
    si dans les lignes que tu veux récupérer il y a des espaces (ce qui est fort possible) essaie-voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $section =~ /TOTO([\w\d\s]+?)TATA/;
    (Dans les crochets, il faut que tu mettes tous les caractères que tu peux avoir.)
    Chez moi ca marche nickel, alors y a pas de raison quand même ...

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    DIEU TE BENISSE !!!

    MERCI

    CA MARCHE CE PUTAIN DE BORDEL DE PROGRAMME MARCHE



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

Discussions similaires

  1. ODBC, langage C et Visual C++ Express 2005
    Par pierremx dans le forum C
    Réponses: 2
    Dernier message: 14/11/2007, 18h51
  2. Réponses: 3
    Dernier message: 07/09/2004, 12h01
  3. Réponses: 7
    Dernier message: 16/07/2004, 13h24
  4. Réponses: 7
    Dernier message: 02/04/2004, 10h47
  5. Réponses: 2
    Dernier message: 04/01/2004, 15h14

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