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 :

Besoin de précision sur Regex


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Par défaut Besoin de précision sur Regex
    Salut,

    Je travail actuellement sur l'analyse d'une page HTML, j'ai besoin de récupérer les "summary" de google. J'ai donc la page.

    Ce qui m'intéresse se trouve entre les balises <div class=g> et </div>.

    J'avais pensé dans un premier temps à faire: ($page contient la page HTML)
    my @tab = ($page =~ m/<div class =g>[^<]*<\/div/gi;
    mais ça ne marche pas si entre les balises <div class=g> et </div>, deux autres balises.

    J'avais donc pensé à modifier mon regex en:
    my @tab = ($page =~ m/<div class=g>[^(<\/div>)]*</div>/gi;
    qui ne semble pas marcher, j'aurais donc aimé avoir plus d'information sur le [^]. Comment lui dire tout, à part la chaine </div>.

    Sinon, comment faire pour extraire dans un tableau les informations qui m'intéresse ?

    V'là si quelqu'un pouvait m'aider je lui en serais reconnaissant sur 4 générations .

  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
    Bonjour,

    Tu dois utiliser un point pour dire que tu récupères n'importe quoi sauf un enter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m/<div class=g>(.*)<\/div>/

    Jasmine,

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Par défaut
    Si je mets le .* ça va me récupérer tout oui.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $s = "<div class=g>string1<b>string2</b></div><div class=g>string3</div><div class=g>string4</div>
    L'expression que tu m'a donné va me renvoyer une unique chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class=g>string1<b>string2</b></div><div class=g>string3</div><div class=g>string4</div>
    Or j'aimerais plutôt remplir un tableau avec pour éléments @tab: (avec l'exemple ici)
    $tab[0] = "<div class=g>string1<b>string2</b></div>"
    $tab[1] = "<div class=g>string3</div>"
    $tab[2] = "<div class=g>string4</div>

    Enfin merci de ta réponse, avec ce que tu me donnes je viens de voir quej pourrais me débrouiller avec le résultat pour avoir ce que je veux.

  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
    Tu devrais chercher à utiliser le split.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if($Ligne =~ /<div class=g>(.*)<\/div>/g)
            {
                    @tab = split('</div><div class=g>',$1);
            }
    L'ennui dans ce cas-ci est que tu perds tes balises.

    $tab[0] = string1<b>string2</b>
    $tab[1] = string3
    $tab[2] = string4

    Pour les garder après avoir rempli le tableau fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map{$_ = '<div class=g>'.$_.'</div>'}@tab;
    <div class=g>string1<b>string2</b></div>
    <div class=g>string3</div>
    <div class=g>string4</div>
    Jasmine,

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Par défaut
    Re merci pour ta réponse. En fait les balises ne m'intéressait pas mais plutôt ce qu'il y avait entre. La première commande que tu m'as donné m'a permis de virer quasi tout ce qui m'intéressait pas (Le plus gros était fait). Après, oui, j'avais pensé au split .

    En tout cas pour ton aide.

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

Discussions similaires

  1. Besoin de précision sur le compilo
    Par mensoif dans le forum C#
    Réponses: 2
    Dernier message: 03/03/2009, 21h24
  2. Map trois dim : Besoin de précision sur un tuto de gamedev.net
    Par TheDrev dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 04/09/2008, 19h29
  3. CRC, besoins de précision sur la facon de calculer svp
    Par italiasky dans le forum Réseau
    Réponses: 4
    Dernier message: 21/06/2008, 09h17
  4. [POO Basique] Besoin de précision sur une notion de base
    Par alois.cochard dans le forum Langage
    Réponses: 8
    Dernier message: 15/09/2006, 09h01
  5. Besoin de précision sur TThread
    Par psau dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2005, 23h35

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