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 :

Sortir une partie d'une page web [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Par défaut Sortir une partie d'une page web
    Bonjour à tous,

    Soit une page web qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    ...blabla1...
    <!-- INFOS -->
    blabla2
    <!-- /INFOS -->
    blabla3
    Je voudrais récupérer blabla2, pour cela je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $blabla = preg_replace('#(.*)<!-- INFOS -->(.*)<!-- \/INFOS -->(.*)#si','$2',$page);
    Mais cela me renvoie la page telle quelle. Une idée ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    Tu cherches
    <!-- INFOS -->
    dans le texte :
    <!--- INFOS -->

    tu risques pas de le trouver !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Par défaut
    En fait, j'ai mis un '-' de trop dans l'exemple, il n'y en a que 2 en fait. J'ai modifié mon message. Sinon, une idée ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut
    Voila ce que je fais (et ça fonctionne très bien)
    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
     $gb_filename =  "http://l'url à parser"; 
     
    // parsing du code HTML
    $gb_contents = "";
    $gb_fd = fopen( $gb_filename, "r" ); 
    if ($gb_fd ) {  // open is successful
    	while (!feof( $gb_fd ) )
    		$gb_contents .= fread( $gb_fd, 63000 ); 
    	fclose( $gb_fd ); 
    }
    // balise encadrante que le parsing doit récupérer
     
    $debut = 'début à parser';
    $fin   = ''fin à parser'';
     
    $taille_debut = strlen($debut);
    $pos_debut = strpos($gb_contents, $debut);
    $pos_fin = strpos($gb_contents, $fin);
    $pos_separateur = strpos($gb_contents, $fin);
    $longueur = $pos_fin - $pos_debut;
    $affiche = substr($gb_contents,$pos_debut,$longueur-0);
    $affiche = le rendu HTML

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Par défaut
    Coachy
    Ca marche, en effet.

    Tu as raison, pourquoi s'e..erder avec des expressions régulières quand on y comprends rien...

    Ceci dit, j'aimerais bien connaitre la réponse avec preg_replace.

  6. #6
    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
    Par défaut
    Bonjour,

    Je ne vois pas d'erreur dans ton expression régulière. Tu aurais simplement pu ajouter des ancrages de début et fin de chaîne.

    Mais ce code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $page = '...blabla1...
    <!-- INFOS -->
    blabla2
    <!-- /INFOS -->
    blabla3
    ';
    $blabla = preg_replace('#(.*)<!-- INFOS -->(.*)<!-- \/INFOS -->(.*)#si','$2',$page);
    var_dump($blabla);
    Cependant, pour faire ce que tu veux avec une expression régulière, mieux vaut utiliser la fonction preg_match (ou preg_match_all).

    Cela donnerait quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $page = '...blabla1...
    <!-- INFOS -->
    blabla2
    <!-- /INFOS -->
    blabla3
    ';
    preg_match('#(?<=<!-- INFOS -->).*(?=<!-- \/INFOS -->)#Usi',$page, $blablas);
    var_dump($blablas);
    Dans ce code, j'ai utilisé les assertions avant et arrières positives pour ne conserver que les données directement précédées par <!-- INFOS --> et suivies par <!-- INFOS -->. J'ai aussi ajouter le modificateur U qui rend la regex non gourmande (recherche le résultat correspondant le plus petit possible).

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

Discussions similaires

  1. Imprimer une partie de la page web courante
    Par Kazumi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/05/2014, 11h11
  2. Imprimer une partie de la page web
    Par touf35 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/06/2008, 21h10
  3. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 13h39

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