2010-06-24 5 views
2

Au cours des dernières heures, je me suis amusé avec regex. Je n'ai jamais osé mettre la main dessus alors s'il te plaît, nue avec moi.preg_match_all question

Basiquement je suis en train d'obtenir des informations de la source suivante

<random htmlcode here> 
<td style="BORDER-RIGHT-STYLE:none;"> 
     <a id="dgWachtlijstFGI_ctl03_hlVolnaam" title="Klant wijzigen" class="wl" href="javascript: Pop(600,860,'klantwijzig','FrmKlant.aspx','? Wijzig=true&amp;lcSchermTitel=&amp;zoekPK=+++140+12++8',false,true); ">FIRST LINE A</a> 
     (SECOND LINE A)<br> 
     THIRD LINE A  </td> 
<random htmlcode here> 
<td style="BORDER-RIGHT-STYLE:none;"> 
     <a id="dgWachtlijstFGI_ctl04_hlVolnaam" title="Klant wijzigen" class="wl" href="javascript: Pop(600,860,'klantwijzig','FrmKlant.aspx','?Wijzig=true&amp;lcSchermTitel=&amp;zoekPK=+++140+12++8',false,true); ">FIRST LINE B</a> 
     (SECOND LINE B)<br> 
     THIRD LINE B  </td> 
<random htmlcode here> 

Ce que je suis venu avec ce qui est loin les suivantes (grâce à rubular.com)

<?php $bestand = 'input.htm'; 
$fd = fopen($bestand,"r"); 
$message = fread($fd, filesize ($bestand)); 
$regexp = "FrmKlant.aspx.*\">(.*)<\/a>\s(.*)<br>\s(.*)\s\s(.*)"; 
if (preg_match_all("#$regexp#siU", $message, $matches)) 
{ 
print_r($matches); 
}? 
> 

Cette réalité semble mettre la première et la deuxième ligne dont j'ai besoin dans un tableau multidimensionnel. Jusqu'ici tout va bien, parce que je veux un tableau multidimensionnel. Cependant, il ne semble pas capturer la 3ème ligne. Et en quelque sorte, il crée tableau [4]

[1] => Array ([0] => FIRST LINE A [1] => FIRST LINE B) 
[2] => Array ([0] => (SECOND LINE A) [1] => (SECOND LINE B)) 
[3] => Array ([0] => [1] =>) [4] => Array ([0] => [1] =>) 

Ce que je suis à la recherche est la suivante:

[0] => Array ([0] => FIRST LINE A [1] => FIRST LINE B) 
[1] => Array ([0] => (SECOND LINE A) [1] => (SECOND LINE B)) 
[2] => Array ([0] => THIRD LINE A [1] => THIRD LINE B)) 

Comme vous avez sans doute remarqué, je suis perdu! Toute aide serait grandement appréciée.

+0

Pour lire la Tout le contenu du fichier, jetez un oeil à http://php.net/manual/fr/function.file-get-contents.php –

+0

lol. Peu importe combien de fois nous le disons ... ils ne cessent de demander, hein? ** n'utilisez pas d'expressions rationnelles pour analyser html ** – mpen

Répondre

0
$regexp = "FrmKlant.aspx.*\">(.*)<\/a>\s(.*)<br>\s(.*)\s\s(.*)</td>"; 
0

Il n'est généralement pas judicieux d'essayer d'extraire des informations HTML/XML en utilisant des expressions régulières. Ils sont très bien adaptés pour traiter des structures imbriquées. Tout ce que vous pouvez essayer va horriblement se casser si vos parties "html aléatoires" sont assez mal, donc utilisez-les seulement si vous avez un très bon contrôle sur le code HTML.

Essayez un analyseur à la place. (Google m'a trouvé http://simplehtmldom.sourceforge.net/, je ne l'ai pas essayé, cependant)

3

analyseur DOM Utilisons PHP

exemple incomplet, mais quelque chose pour vous aider à démarrer:

$dom = new DOMDocument(); 
$dom->loadHTML($yourHtmlDocument); 

$xPath = new DOMXPath($dom); 
$elements = $xPath->query('\\random\td\a'); // Or whatever your real path would be 

foreach($elements as $node) { 
    echo $node->nodeValue; 
} 

By the way, look at this.