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 d expressions regulieres


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Par défaut probleme d expressions regulieres
    Bonjour

    Voila je cherche a reconnaitre une expression du type dans un fichier:


    - bla___blakjkfhjsah2758 nkvnhdjsJSHJHSJ44


    voila l expression que j utilise : if ($ligne=~/^\s+-\s+(\w+)\s+\w+/)

    je veux donc recupere r bla___blakjkfhjsah2758

    mais il me recupere tout sauf ca!!!!!!!


    Mon fichier comporte 1738329 lignes , peut etre que ca vient de la.....???

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Est ce bien ton espace qui marque la fin de ce que tu veux récupérer?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $ligne = "- bla___blakjkfhjsah2758 nkvnhdjsJSHJHSJ44";
    my ($Var1) = ($ligne =~/^\-\s([\w\_\d]*)\s+[\w\d]*/);
    print $Var1."\n";
    récupère:

    bla___blakjkfhjsah2758

    avec le if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $ligne = "- bla___blakjkfhjsah2758 nkvnhdjsJSHJHSJ44";
     
    if ($ligne=~/^\-\s[\w\_\d]*\s+[\w\d]*/)
    {
            my ($Var1) = ($ligne =~/^\-\s([\w\_\d]*)\s+[\w\d]*/);
            print $Var1."\n";
    }

    Si tu ne connais pas le nombre de tirets et d'espaces précédent ce que tu veux récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($Var1) = ($ligne=~/^[\-\s]*([\w\_\d])*\s+[\w\d]*/);
    Jasmine,

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Par défaut ma reponse a l aide
    Merci pour ton aide, mais, pour l instant je n ai pas pu verifier si ton code fonctionne...;

    Seulement, je pensais que dans w le _ etait compris????

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Oui, tu as raison l'undescore est compris dans le \w

    Jasmine,

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Par défaut
    J'ai une question que je n'arrive pas à résoudre. Comment représente-t-on un espace dans les expressions régulières?
    \s pour l'ensemble des espaces, y compris " " (plus saut de ligne, retour chariot, tabulation...) Mais chacun a son code \n pour saut de ligne, \t pour tabulation...
    Je n'arrive pas à trouver la réponses sur le forum.
    Merci d'avance pour vos réponses.

  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
    Comment représenter un espace ? Tu veux dire un "whitespace" je suppose, un blanc ? Et bien par un blanc....
    reconnaitra simplement la séquence "hello world" (avec un espace au milieu).

    Cependant il est assez rare en pratique qu'on veuille réellement reconnaître simplement un espace. Plus généralement on veut reconnaitre n'importe quel type d'espace (donc avec \s), et souvent en quantité indéterminé (soit *, soit +). De plus, dans le cas de regex complexe, on a souvent intérêt à expliciter la structure de la regex, à la commenter... Pour cela, on utilise le modificateur /x, qui dépouille le blanc de toute valeur sémantique dans la regex, et autorise à embarquer des commentaires dans celle-ci, on utilise alors souvent \s+ pour marquer un espace, et si on a vraiment besoin d'un vrai blanc, on peut toujours se rabattre sur une classe de caractère [ ] ou sur son code numérique \x20 (32 en décimal, donc 20 en hexa).
    Exemple de code reconnaissant une chaîne de caractère entre guillemets " où l'on peut "échapper" des caractères de contrôles, entre autre les guillemets " :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my $dquoted_string = qr/
    "             # opening double quote
    (             # capturing parens
    (?:           # grouping parens
      (?>["\\]+)  # anything not " or \ , non-backtracking for speed
    | \\.         # escaped sequence
    )*            # end of non-capturing group, can be repeated
    )             # end of capturing group
    "             # end of string
    /x;
    --
    Jedaï

Discussions similaires

  1. probleme avec expression reguliere
    Par naourass dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/11/2005, 12h15
  2. [langage]Probleme d'expression reguliere
    Par Slippers dans le forum Langage
    Réponses: 2
    Dernier message: 29/06/2005, 17h45
  3. Réponses: 7
    Dernier message: 16/07/2004, 13h24
  4. [langage] Problème d'expression régulière
    Par xavro dans le forum Langage
    Réponses: 11
    Dernier message: 13/07/2004, 14h48
  5. [langage] Problème d'expression régulière
    Par And_the_problem_is dans le forum Langage
    Réponses: 7
    Dernier message: 22/03/2004, 15h03

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