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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 13
    Points
    13
    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 actif
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    tu risques pas de le trouver !

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 13
    Points
    13
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Points : 3
    Points
    3
    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 à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 13
    Points
    13
    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
    Points : 3 344
    Points
    3 344
    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).

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    J'avais pas testé mon expression avec la chaine simple que j'ai mis en exemple.

    Alors pourquoi ça ne fonctionne pas avec la page web en entier, je vais essayer de regarder ça.

    Et je vais essayer avec preg_match aussi.

    Merci Eusebe !

+ 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, 12h11
  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, 22h10
  3. Réponses: 1
    Dernier message: 04/04/2008, 13h14
  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, 17h47
  5. copier une partie d'une image vers une autre
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 14/04/2006, 14h39

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