2012-02-23 2 views
1

J'essaie d'apprendre à extraire des données d'une page avec php, je peux voir comment tout obtenir entre les balises, mais y a-t-il un moyen d'obtenir le contenu des balises dans les balises?est imbriqué preg_match possible?

Dans le HTML ci-dessous, comment aurais-je accès au contenu de l'une des plages en gras, la seconde par exemple?

<html> 
<div class="padding10"> 
<span class="bold"></span> 
<span class="bold"></span> 
<span class="bold"></span> 
<span class="bold"></span> 
</div> 
</html> 

J'ai essayé ce qui suit, ce qui me permet d'obtenir le contenu du div padding10 mais je ne sais pas comment aller plus loin pour obtenir les travées gras. Tout ce que j'ai essayé ne fonctionne pas.

//gets all 
$file_string = file_get_contents('http://www.test.com/index.html'); 

//gets all in padding10 div 
preg_match('/<div class="padding10">(.*)<\/div>/si', $file_string, $padding_10); 

//gets all bold spans on padding10 div?? 
preg_match_all('/<span class="bold">(.*)<\/span>/i', $padding_10[1], $spans_10); 

Je commence à se rendre compte de ce que je lis que c'est probablement une mauvaise façon ou inefficace d'aller à ce sujet, mais toute aide serait super. Merci.

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

Cela devrait vous aider à démarrer: http://stackoverflow.com/questions/1898905/recursive-regular-expression-to-process-imbatted-strings-closed-by-and – yoda

+0

[Avez-vous essayé un analyseur HTML?] (http://stackoverflow.com/questions/1732348/regex-match -open-tags-except-xhtml-self-contained-tags/1732454 # 1732454) – deceze

Répondre

2

Peut-être que phpQuery pourrait vous aider?

"une API DOM (Document Object Model) pilotée par sélecteur CSS3 côté serveur, basée sur jQuery JavaScript Library." Cela vous permettra de sélectionner des choses à partir d'un document HTML analysé. Cela peut être mieux adapté à l'analyse/déplacement HTML que de faire des regexes "à la main".

http://code.google.com/p/phpquery/

+0

désolé jamais vraiment utilisé php avant, est-ce aussi simple que le téléchargement et l'ajout: require_once ('phpQuery-onefile.php'); – mao

4

Avez-vous essayé this?

+0

non mais je le regarde maintenant, merci – mao

+0

bienvenue! il est bien documenté et facile à mettre en œuvre. – dee

+0

C'est beaucoup plus simple. Ca marche pour moi, du code au cas où quelqu'un le trouverait utile: foreach ($ html-> find ('div [class = padding10]') as $ element); For12 ($ element-> find ('span [class = bold]') as $ e) echo $ e-> innertext. «
»; – mao