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 averti
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 18
    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
    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 averti
    Inscrit en
    Août 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 18
    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
    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