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 PHP Discussion :

Récupération de texte dans une variable [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Récupération de texte dans une variable
    Bonjour! =)

    Je tente de récupérer le texte contenu entre deux balises html d'une page html. Le code html entier de la page est dans la variable $page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $texte = $page; 
    $marqueurDebutPseudo = '<span class="name">'; 
    $debutPseudo = strpos( $texte, $marqueurDebutPseudo ) + strlen( $marqueurDebutPseudo );
    $marqueurFinPseudo = '</span><br><span class="postdetails poster-profile">';
    $finPseudo = strpos( $texte, $marqueurFinPseudo );
    $lePseudo = substr( $texte, $debutPseudo, $finPseudo - $debutPseudo ); 
    $lePseudo = eregi_replace("<strong[^>.]*>","",$lePseudo);
    $lePseudo = eregi_replace("<a[^>.]*>","",$lePseudo);
    $lePseudo = eregi_replace("<span[^>.]*>","",$lePseudo);
    Ce code marche très bien sauf qu'il n'exécute l'opération qu'une seule fois. Je cherche à répeter cette opération autant de fois qu'il est possible de l'exécuter. J'ai tenté avec des boucles while, for et.. Mais rien. Je pense que quand j'aurais le bon code sous les yeux je comprendrais mieux^^

    Merci beaucoup!

    JQuinn

    EDIT: Je m'excuse, je me suis trompé de forum..

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu veux récupérer tous les pseudos d'une page HTML, et pour cela tu récupères le contenu entre deux balises, puis tu supprimes les balises qui te gênent ?

    Tu as deux solutions :
    - soit avec une boucle (comme tu le voulais), pour cela il faut utiliser le 3ème paramètre de strpos (offset) pour décaler l'analyse au fur et a mesure ;
    - soit en récupérant ce qui t'intéresse d'un coup avec une regex et preg_match_all :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbResults = preg_match_all ('#(?<=<span class="name">).*(?=</span><br><span class="postdetails poster-profile">)#U', $texte, $matches)
    Les pseudos devraient alors être récupérables dans le tableau $matches[0]

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Tout d'abord merci de ta réponse Eusebe

    Si j'ai bien compris, tu veux récupérer tous les pseudos d'une page HTML, et pour cela tu récupères le contenu entre deux balises, puis tu supprimes les balises qui te gênent ?
    Voilà tout à fait

    J'ai suivi ta deuxième méthode, je me suis renseigné sur les regex et appri comment les faire (enfin en partie, il faut dire que c'est un chapitre de PHP à digérer en plusieurs fois )

    Cela marche à présent parfaitement =)

    Cependant j'ai encore un problème (ce ne serait pas marrant sinon).

    Dans ma page html, je dois récupérer les pseudos, les dates et les messages (c'est une page de topic d'un forum clefs en main pour tout vous dire).

    Pseudo: aucun problème comme dit plus haut. Dates, j'ai un peu bidouillé pour les transformer et en faire un timestamp valide; Il reste donc les messages qui buguent.. Il ne veulent pas s'afficher sous un "echo":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $post_html = preg_match_all('#class="postbody">(.+)_____<br>#i', $page, $post);
    Le contenu de la page html est dans ma bdd. Il se pourrait qu'il s'agisse d'un problème d'espace ou de retour à la ligne..

    Contenu du code html (extrait):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <span class="postbody"><!--
     google_ad_section_start --><strong>Blabla</strong><!--
     google_ad_section_end --><br>_________________<br>
    (Copié/collé comme tel sans modification)

    Comment faire alors ? J'ai tenté avec divers scripts du net pour enlever les espaces en trop ou retour à la ligne mais rien..

    Merci d'avance

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    si c'est un problème de retour à la ligne, essaie avec le modificateur s :
    http://g-rossolini.developpez.com/tu...e=page_2#LII-7

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Rien..

    Code php de la regex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $post_html = preg_match_all('#<span class="postbody">(.*)______<br>#s', $page, $post);
    EDIT:
    Pareil avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $post_html = preg_match_all('#<span class="postbody">(.*)______<br>#is', $page, $post);
    Code php du echo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo ''.$post[1][1].'';
    echo ''.$post[1][2].'';
    D'autres idées ?

    Bonne soirée, merci d'avance,

    JQuinn

    EDIT#2:
    Ca marche! Hourra (Juste au moment où il faut allez dormir, ça pouvait pas marcher à 16h )
    Bref, solution miracle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $post_html = preg_match_all('#<span class="postbody">(.+)______<br>#isU', $page, $post);
    Merci à Eusebe pour son aide Bonne soirée +
    Bonne continuation... Et vive PHP!

    JQuinn

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 05/11/2014, 15h36
  2. Problème de récupération de texte dans une variable
    Par LeoBeutel dans le forum Cpcdos
    Réponses: 11
    Dernier message: 04/11/2014, 19h41
  3. [Toutes versions] Récupération de texte dans une variable
    Par m@tix dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 29/07/2011, 11h18
  4. Réponses: 3
    Dernier message: 06/09/2006, 10h06
  5. Plusieurs lignes de texte dans une variable texte
    Par Loko dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 15/12/2005, 13h51

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