Extraire d'une chaine en php

Bonjour a tous, j'ai un petit problème de regex en php (j'aime po les regex).
Je suis sur que c'est tout con mais je bloque dessus depuis quelques heures. Je cherche juste a extraire ce qu'il y a dans les balises <head> et <body> d'une page web. Je récupère la source avec un fopen.
J'ai essayé avec un truc comme ça :
if (preg_replace_callback("#<head>(.*)</head>#Ui",$txt,$matches)) {
	echo $matches;
}


J'ai remplacé le "preg_replace_callback" par un peu tout ce que j'ai put trouvé, mais rien a faire. Au final, ce serais pour faire un navigateur dans un navigateur (un peu comme ça: http://www.naviguer.ca/ mais en mieux ^^,)
Merci d'avance.
--
Il est souvent plus rapide de chercher que d'attendre une réponse... Google est notre ami.
Configuration: Windows XP
Firefox 3.0.6

8 réponses

  1. Je vais continuer a chercher. En tout cas, merci. Si je trouve la solution (et je vais a trouver!!!) je te tiens au courant.
    1. Toujours pas. Et je pense que tu as oublié un \ devant le 2ème "
      C'est bizzard, quand je fait un "count" sur un preg_match_all il me trouve 2 truc, mais quand je fait un count sur, par exemble $h[0] il m'en trouve aucun.
      Exemple :

      $pattern = '#<head>(.*)</head>#Ui';
       
      	preg_match_all($pattern,$txt,$h); 
      	$n = count($h);
      	for ($q=0;$q<$n;$q++) {
      		$z = count($h[$q]);
      		for ($i=0; $i<$z; $i++) {
      			echo $h[$q][$i];
      		}
      	}

      Et la, il me trouve :
      $n = 2
      et
      $z = 0

      J'y comprend plus rien... Et si je change le $pattern, c'est la même chose...
      1. Non plus. J'ai le droit a une page blanche avec rien dans la source. Peut-être qu'en javascript...

        Sinon, j'ai cherché à récupérer l'url d'une balise <object> ou <iframe> contenant un site web mais a chaque fois, j'ai le droit à un permission.denied.
        Si quelqu'un à trouvé la solution pour contourné cette sécurité, je suis preneur.
        1. if (preg_match_all("#<head>([^"]+)</head>#Ui", $txt, $matches))
          ?
          1. Désolé, ca ne fonctionne pas. < et > ne font pas partie des caractères à échapper je crois.
            j'ai essayé avec ca aussi :

            $pattern = '#<head>(.*)</head>#i';
             
            preg_match_all($pattern,$txt,$h); 
            $n = count($h);
            for ($q=0;$q<$n;$q++) {
            	$z = count($h[$q]);
            	for ($i=0; $i<$z; $i++) {
            		echo $h[$q][$i];
            	}
            }
            

            Mais ça ne fonctionne pas non plus... Si ca peut mettre quelqu'un sur une piste...
            En tout cas, merci d'avoir essayer.
            C'est vraiment l'horreur les regex...
            1. Avec ça ?

              if (preg_replace_callback("/\<head\>([^\:]+)\<\/head\>/", $txt, $matches))
                   {
                   echo $matches;
                   }

              je suis pas sûr de l'anti-slash devant le slash.

              Discussions similaires

              Tv bloquée sur une chaîne

              7 réponses