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 :

[Regex] encore un ^^


Sujet :

Langage Perl

  1. #1
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut [Regex] encore un ^^
    Salut a tous!
    Voila , j'ai cherché pas mal , mais je n'ai pas trouvé ce que je cherche ; je me décide finalement a poster ici en espérant etre assez explicite.

    Probleme=>

    Je voudrai récupéré des chiffres qui se trouve sur une page Web .
    Je pense que c'est assez simple a faire ,mais je suis NUL en regex et c'est l'occasion ou jamais de s'y mettre!!

    Bref, je doit me connecté a ce site et récupéré une valeur numérique de 9 caractères ( sachant qu'il y a aussi d'autres caracteres non numériques) comment faire?
    Comment ne récupéré QUE les nombres?

    j'avai pensé a un code genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #!/usr/local/bin/perl 
     
    use warnings;
    use LWP::UserAgent;
    use HTML::Form;
     
     
     
    my $recup;
     
    my @chaine=("http://www.site.com/index.php");
     
    my $chaine;
    @chaine =split('', $chaine);
     
    foreach my $lettre (@chaine) {
     if ($lettre =~ /\d/) { my $recup .= $lettre;}
    last if (scalar($recup) eq 9);
    }
    print "résultat: $recup!\n";
    Largement inspiré su post de Djibril :http://www.developpez.net/forums/showthread.php?t=65032

    Voici ce que le code me retourne:
    Use of uninitialized value in split at p.pl line 14.
    Use of uninitialized value in concatenation (.) or string at p.pl line 20.
    résultat: !
    ligne 20 étant celle ci :print "résultat: $recup!\n";
    j'avoue ne pas tout comprendre la...

  2. #2
    Membre averti Avatar de Vespasien
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 383
    Points : 434
    Points
    434
    Par défaut
    $chaine n'est pas initilialisée -> ligne 14

    $recup n'est plus visible au moment du print, hors de portée.

  3. #3
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $chaine;
    @chaine =split('', $chaine)
    Je l'ai bien déclarée , ensuite je ne voit pas quoi faire de plus?
    Expliquation please?
    Quand a $recup , il est hors du bloc, c'est vrai ( déja une réponse a mes question , merci )

  4. #4
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par messinese Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $chaine;
    @chaine =split('', $chaine)
    Je l'ai bien déclarée , ensuite je ne voit pas quoi faire de plus?
    $chaine est déclarée, mais pas initialisée... Tu n'as pas récupéré le contenu de la page Web, tu as juste mis son URL dans @chaine.

    Citation Envoyé par messinese Voir le message
    Quand a $recup , il est hors du bloc, c'est vrai ( déja une réponse a mes question , merci )
    Ce n'est pas le problème : si $recup est déclaré avant un bloc alors il est visible dedans. Le problème c'est que tu le redéclare (avec my) dans le petit bloc du if(), il y a donc deux $recup, un à l'intérieur du if() (qui est redéclaré et vidé à chaque passage dans la boucle) et un $recup à l'extérieur que tu n'initialise même pas et qui est toujours undef quand tu essaie de l'afficher.

    --
    Jedaï

  5. #5
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    ok merci a vous de ces réponse.
    J'ai modifié et supprimé aussi ce qui n'était pas nécéssaire .
    J'obtien un résultat mais ..comment dire..pas celui que j'attendait !

    pour info la regex est -elle vraiment celle dont j'ai besoin pour récupéré uniquement des chiffre? j'ai un doute la...sa me parait bizzare?!

    bon je vous montre le script et le résultat obtenu si vous aviez encore des idées , ça serai cool merci a tous !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    my @chaine=("site.com");
    # initialisation de l'agent falsifié
        my $ua =
          LWP::UserAgent->new(
            agent => 'InternetExplorer/2.0 [en] (X11; I; Windows sp2 i386; Nav)' );
     
     # création de la requête http
        my $req = HTTP::Request->new( GET => "@chaine " );
     
    # exécute la requête et reçoit la réponse
         my $res = $ua->request($req);
        die $res->status_line if not $res->is_success;
     
     
     
     
    @res=split('', $res);
     
    foreach my $lettre (@res) 
    {
     
     $lettre =~ /\d/;
     my $recup .= $lettre;
    print "résultat: $recup!\n";
    }
    et voici le résultat de la requete :
    résultat: H!
    résultat: T!
    résultat: T!
    résultat: P!
    résultat: :!
    résultat: :!
    résultat: R!
    résultat: e!
    résultat: s!
    résultat: p!
    résultat: o!
    résultat: n!
    résultat: s!
    résultat: e!
    résultat: =!
    résultat: H!
    résultat: A!
    résultat: S!
    résultat: H!
    résultat: (!
    résultat: 0!
    résultat: x!
    résultat: 8!
    résultat: 4!
    résultat: f!
    résultat: 4!
    résultat: c!
    résultat: 3!
    résultat: 0!
    résultat: )!
    pourquoi et comment faire ????

  6. #6
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    $res n'est pas le contenu de la page : c'est un objet HTTP::Response.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach my $lettre (@res)  {
      $lettre =~ /\d/;
      my $recup .= $lettre;
      print "résultat: $recup!\n";
    }
    $recup est redéclaré à chaque passage dans la boucle, il ne se "remplit" donc jamais...
    Tu fais un match avec m/\d/ mais tu ne tiens pas compte du résultat, c'est comme si le match n'était pas là...

    Voyons déjà un script un peu plus sain, même s'il ne correspond sans doute pas à ton besoin (qui est fort nébuleux... tu ne veux tout de même pas récupérer les 9 premiers chiffres qu'on peut trouver dans une page HTML ? Ca n'a aucun sens !), j'ai opté pour la récupération de la première séquence de 9 chiffres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/perl
    use strict; use warnings;
    use LWP::Simple;
     
    my $content = get("http://www.site.com");
    my $sequence = ($content =~ m/(\d{9})/);
    print $sequence;
    --
    Jedaï

  7. #7
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 876
    Points
    876
    Par défaut
    tu ne veux tout de même pas récupérer les 9 premiers chiffres qu'on peut trouver dans une page HTML ? Ca n'a aucun sens !
    Ben c'est justement ce que je veux faire !

    En fait la page se présente comme ça :
    votre password est : 123456789
    et je veux récupéré uniquement les chiffres , c'est exactement ça .

    Probleme résolu merci pour vos explications qui mon été fort utiles.

    pour infos voici le code final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    use LWP::UserAgent;
      $ua = LWP::UserAgent->new;
      $ua->agent("MyApp/0.1 ");
      $h = HTTP::Headers->new;
     
      $h->header('Cookie' => 'MonCookie=MaValeur;SecondCookie=myVal2');
     
    my $url=("http://www.site.com/index.php?");
     
     # création de la requête http
        my $req = HTTP::Request->new( GET => "$url " );
     
    # exécute la requête et reçoit la réponse
         my $res = $ua->request($req);
        die $res->status_line if not $res->is_success;
     
     
     $lettre =( $url= ~ /(\d{9})/);
     
    print "résultat: $lettre!\n";

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

Discussions similaires

  1. Regex (encore ..)
    Par Moymoy dans le forum Langage
    Réponses: 19
    Dernier message: 05/07/2015, 15h54
  2. [RegEx] Encore les regex
    Par Joelindien dans le forum Langage
    Réponses: 8
    Dernier message: 03/04/2009, 19h26
  3. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  4. [RegEx] regex simple qui ne marche pas (encore)
    Par denisvignes dans le forum Langage
    Réponses: 5
    Dernier message: 19/09/2008, 15h04
  5. TPalette (encore)
    Par Flipper dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2002, 23h45

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