2010-07-04 5 views
1

Quel est le problème avec mon code? Je souhaite obtenir toutes les dates de mais mon tableau est vide.file_get_contents et div

<?php 
$url = "http://weather.yahoo.com/"; 
$page_all = file_get_contents($url); 

preg_match_all('#<div id="myLocContainer">(.*)</div>#', $page_all, $div_array); 

echo "<pre>"; 
print_r($div_array); 
echo "</pre>"; 
?> 

Merci

+2

Il pourrait soyez votre code, ça pourrait ne pas être. S'il vous plaît fournir plus de débogage sinon vous perdrez d'autres temps dans les chasses aux oies sauvages. – zaf

Répondre

-2

Testez votre réponse avant de lancer la recherche regex. Ensuite, vous saurez quelle partie ne fonctionne pas.

+1

file_get_contents peut utiliser un wrapper de flux http, donc pas seulement pour les fichiers locaux. –

+0

Vous apprenez quelque chose de nouveau tous les jours. –

0

Vous souhaitez analyser un contenu multiligne, mais vous n'avez pas utilisé le commutateur multiligne du motif REGEX. Essayez d'utiliser ceci:

preg_match_all('#<div id="myLocContainer">(.*?)</div>#sim', $page_all, $div_array); 

S'il vous plaît noter que les expressions régulières ne convient pas à l'analyse du contenu HTML en raison de la nature des documents hiérarchique HTML.

0

essayer d'ajouter "m" et modificateurs "s", de nouvelles lignes pourraient être dans le div dont vous avez besoin .. comme ceci:

preg_match_all('#<div id="myLocContainer">(.*)</div>#ms', $page_all, $div_array); 
0

Avant de déconner avec REGEX, essayez HTML Grattage. Ce HTML Scraping in Php pourrait donner quelques idées sur la façon de le faire d'une manière plus élégante et (peut-être) plus rapide.

+0

Il existe une implémentation récente d'une telle librairie (permettant d'accéder à des éléments via CSS etc) construite sur PHP 5.3, en utilisant certains composants de la prochaine Symfony 2. Note: C'est encore un peu instable. http://www.phparch.com/2010/04/22/four-new-php-5-3-components-and-goutte-a-simple-web-scraper/ – igorw

0
$doc = new DomDocument; 
$doc->Load('http://weather.yahoo.com/'); 
$doc->getElementById('myLocContainer'); 
0

vous devez Excape Caractères spéciaux dans votre expression régulière comme suit

~\<div id\=\"myLocContainer\"\>(.*)\<\/div\>~ 

aussi Commander wheather il y a un problème de saut de ligne ou non comme mentionné par @eyazici et @kgb