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. Avec ça ?

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

    je suis pas sûr de l'anti-slash devant le slash.
    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. if (preg_match_all("#<head>([^"]+)</head>#Ui", $txt, $matches))
        ?
        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. 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. Je vais continuer a chercher. En tout cas, merci. Si je trouve la solution (et je vais a trouver!!!) je te tiens au courant.

              Discussions similaires

              Tv bloquée sur une chaîne

              7 réponses