Extraire d'une chaine en php

Fermé
zoby44 Messages postés 818 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 7 avril 2010 - 26 févr. 2009 à 23:09
zoby44 Messages postés 818 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 7 avril 2010 - 27 févr. 2009 à 02:08
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.
A voir également:

8 réponses

Torkass Messages postés 166 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 janvier 2016 95
27 févr. 2009 à 00:30
Avec ça ?

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

je suis pas sûr de l'anti-slash devant le slash.
0
zoby44 Messages postés 818 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 7 avril 2010 199
27 févr. 2009 à 01:32
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...
0
Torkass Messages postés 166 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 janvier 2016 95
27 févr. 2009 à 01:42
if (preg_match_all("#<head>([^"]+)</head>#Ui", $txt, $matches))
?
0
zoby44 Messages postés 818 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 7 avril 2010 199
27 févr. 2009 à 01:51
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Torkass Messages postés 166 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 janvier 2016 95
27 févr. 2009 à 01:52
Je viens d'éditer mon message, essaye celui-ci.
0
zoby44 Messages postés 818 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 7 avril 2010 199
27 févr. 2009 à 01:59
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...
0
Torkass Messages postés 166 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 21 janvier 2016 95
27 févr. 2009 à 02:05
Alors là je ne vois pas, désolé... :/
0
zoby44 Messages postés 818 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 7 avril 2010 199
27 févr. 2009 à 02:08
Je vais continuer a chercher. En tout cas, merci. Si je trouve la solution (et je vais a trouver!!!) je te tiens au courant.
0