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 :

preg_match_all : problème de capture [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut preg_match_all : problème de capture
    Bonjour à tous,

    Je créé un petit outil qui me permet de parser des pages que je consulte souvent pour ne récupérer que les infos qui m'intéresse.

    Dans le code source de la page, le pseudo des gens se trouve dans une séquence comme celle ci :

    J'ai fais une fonction qui me récupère tous les pseudos de la page avec un preg_split, histoire de compter. Le nombre retourné est juste.

    J'ai fais une fonction pour récupérer le pseudo avec preg_match_all... et c'est là que j'ai un soucis...

    voici la partie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private $MasquePseudo = '`<hr><b>(.+)</b>,`isU';
     
    public function DRCreerTableauPseudos()
      {
        $this->DRDebug("- Création d'un tableau contenant la liste des élements de la vue");
        //création des noms des personnages
        $this->DRDebug("-- Création de la liste des noms des personnages");
        preg_match_all($this->MasquePseudo,$this->CodeHtml,$L_Captures);
        $this->TableauVue["nom"] = $L_Captures[1];
    et le contenu de $L_Captures[1] n'est pas bon...

    Voici une rapide portion du rendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseover=\"return overlib(\'&nbsp;&nbsp;&nbsp;&nbsp;<b>10 / 56 </b>&nbsp;&nbsp;&nbsp;&nbsp; distance : 3<br><hr><b>Soul
    Alors que la réponse attendue est seulement "Soul" (dernier mot de la ligne).

    donc si je fais un print_r($L_Captures[1]), ca me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    array(
    [0]=> [plein de code qu'il ne devrait pas y avoir]LE_PSEUDO
    [1]=> [Encore du code qui ne devrait pas y avoir]LE_PSEUDO
    Avez vous une idée ?
    Est-ce mon masque qui est foireux ?
    Est-ce qu'il y a une erreur dans le code HTML de base (il fait pas loin de 2000 lignes... je le poste donc pas )

    Merci de vos futures aides

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour
    et comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    private $MasquePseudo = "^<hr><b>(.*)</b>$";

  3. #3
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Le print_r me retourne un tableau vide...
    Alors que, pourtant, avec ^exp$ ça semble signifier "une chaine contenant exp"

    Le fait est que la page que je tente de parser tient sur "une seule ligne", est ce que ça pourrait venir de là ? (j'ai peur de polluer le forum si je poste le code source html)

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Le problème est que si tu retrouves plusieurs fois ce pattern, dans le code html, normalement il prendra le dernier.

    essaye avec un eregi pour voir su tu trouves quelques chose.

    le plus simple est de faire des test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $MasquePseudo = "^<hr><b>(.*)</b>$";
    $pseudo = "<hr><b>Maitrepylos</b>";
    eregi($MasquePseudo,$pseudo,$L_Captures);
     
    echo $L_Captures[1];
    Il faut bien sur adapter à ton code

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Citation Envoyé par MaitrePylos
    Le problème est que si tu retrouves plusieurs fois ce pattern, dans le code html, normalement il prendra le dernier.
    La fonction preg_match_all, et c'est là tout son intérêt, les capture toutes (en réalité c'est purement théorique car limitée). J'ajoute qu'il est vivement recommandé de ne plus utiliser les fonctions ereg* (dépréciées en quelque sorte).

    Sans source/exemple difficile de vous apporter une réponse, d'autant plus que votre précédent exemple est incomplet (un lien ou un extrait très limité et représentatif de la source serait la bienvenue), mais ça vient sans doute de votre motif (puisqu'il y figure déjà le modificateur de non gourmandise).

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Heu le ereg, c'est juste pour faire des tests, et voir si il capture quelque chose

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/07/2011, 16h44
  2. Problème de capture de vidéo non compressée
    Par visio dans le forum OpenCV
    Réponses: 7
    Dernier message: 18/02/2008, 09h45
  3. Problème de capture de la souris
    Par Teaniel dans le forum C++Builder
    Réponses: 0
    Dernier message: 27/10/2007, 19h07
  4. Problème outil capture Windows Vista
    Par Pierre5902 dans le forum Windows Vista
    Réponses: 5
    Dernier message: 26/09/2007, 11h02
  5. problème de capture son avec Directshow
    Par albator83 dans le forum DirectX
    Réponses: 2
    Dernier message: 06/11/2003, 17h18

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