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 :

Aide sur fonction Grep sur un tableau contenant des regex


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Aide sur fonction Grep sur un tableau contenant des regex
    Bonjour,

    J'ai un problème pour retourner une liste d'url d'un tableau.
    J'ai donc un tableau comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    http://www.toto.fr/dossier[1|2]/index.html
    http://www.titi.fr/dossier/index.html
    http://www.toto.fr/dossier1/index.html
    http://www.toto.fr/dossier2/index.html
    http://www.titi.fr/
    Quand je fait un grep sur "http://www.toto.fr/dossier1/index.html"

    J'aimerai que le grep me retourne : http://www.toto.fr/dossier[1|2]/index.html et http://www.toto.fr/dossier1/index.htm

    Avec mon code il ne me retourne que http://www.toto.fr/dossier1/index.html

    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    use strict;
    use Data::Dumper;
     
    my @url = qw("http://www.toto.fr/dossier[1|2]/index.html" "http://www.titi.fr/dossier/index.html" "http://www.toto.fr/dossier3/index.html" "http://www.toto.fr/dossier4/index.html" "http://www.titi.fr/");
     
    my $addr = "http://www.toto.fr/dossier1/";
     
    my @result = grep { /$addr/ } @url;
     
    print Dumper @result;
    Merci d'avance pour votre aide
    Franpom

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Euh, ça me paraît parfaitement normal que si ta regex contient "http://www.toto.fr/dossier1/", elle ne puisse reconnaître la chaîne "http://www.toto.fr/dossier[1|2]/index.html": la regex échoue dès qu'elle voir le "[" dans la chaîne puisque tu spécifies qu'il doit y avoir un 1 à cet emplacement.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    En regex http://www.toto.fr/dossier[1|2]/index.html correspond à soit http://www.toto.fr/dossier1/index.html soit http://www.toto.fr/dossier2/index.html
    le [1|2] signifie caractère 1 ou 2.

    Franpom

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    D'accord, c'est un peu ce que je soupçonnais, mais je n'étais pas du tout sûr, je n'arrivais pas vraiment à comprendre ce que tu cherchais à faire. En fait, il semble y avoir une grosse confusion de ta part, le problème est simplement que tu intervertis la chaîne de caractères à reconnaître et la regex censée la reconnaître.

    Considère l'exécution du script à la ligne de commande suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ perl -e '
    my @url = qw(http://www.titi.fr/dossier/index.html http://www.toto.fr/dossier2/index.html http://www.toto.fr/dossier1/index.html http://www.titi.fr/);
    my $regex = qr{http://www.toto.fr/dossier[12]};
    print join "\n", grep { /$regex/ } @url
    '
    http://www.toto.fr/dossier2/index.html
    http://www.toto.fr/dossier1/index.html
    En mettant la classe de caractère "[12]" (pas besoin dans une classe de caractère du "|" qui sert à autre chose) dans la regex et non dans la chaîne de caractères à reconnaître, la regex reconnaît bien les deux noms de fichiers recherchés.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/06/2015, 21h31
  2. Réponses: 8
    Dernier message: 21/02/2014, 11h29
  3. Fonction "grep" sur résultats scan WIFI
    Par kabol69 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 12/02/2014, 22h03
  4. Réponses: 6
    Dernier message: 18/04/2013, 22h51
  5. Tri sur plusieurs champs d'un tableau contenant des objets
    Par swampsnake dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/07/2011, 13h14

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