Regex overspringen naar volgende wedstrijd

Ik gebruik PHP/Regex om enkele gegevens voor een toepassing te ontleden. De pagina's die ik parseer, hebben tabelindelingen die een koptekst bevatten gevolgd door een aantal items. Wat ik probeer te doen is de koptekst voor elke tabel te krijgen, samen met alle items, zodat ik elk item kan labelen als onderdeel van die groep (gedefinieerd door de koptekst).

Ik heb het momenteel opgezet met een expressie die overeenkomt met elke header, en dan alles tot aan de volgende header. Ik gebruik vervolgens een lus voor het aantal koppen om overeen te komen met de aanvullende gegevens van de tweede overeenkomst in de eerste uitdrukking.

Dus eigenlijk:

preg_match_all ('#table-header.*?>(.*?)<\/td>(.*?)table-header#s', $url, $gr, PREG_PATTERN_ORDER);

for($i = 0; $i < count($gr[0]); $i++) {
  preg_match_all ('#type_id.*?(.*?) ... #s', $gr[2][$i], $info, PREG_PATTERN_ORDER);
  $group = trim($gr[1][$i]);

  for($ii = 0; $ii < count($info[0]); $ii++) {
    $name = trim($info[1][$ii]);
    ...
   }
 }

Mijn probleem is dat het elke andere groep overslaat, wat ik alleen kan aannemen is omdat het overeenkomt met tabel-header naar tabel-header, en vervolgens naar de volgende tabel-header springt in plaats van het starten van de volgende overeenkomst met de kop van de eindtafel-header van de eerste wedstrijd. Hoe kan ik het krijgen om de volgende wedstrijd te beginnen met het eindpunt van de vorige wedstrijd? Helaas hebben de pagina's onvoldoende unieke items nabij het begin-/eindpunt om iets anders te gebruiken. De code lijkt hierop:

<td align='center' class='table-header' colspan='18' valign='top'>
    Header
</td>

...items...

<td align='center' class='table-header' colspan='18' valign='top'>
    Header 2
</td>

Ik heb geprobeerd de colspan als begin van mijn uitdrukking te gebruiken en alles tot de volgende tabelheader te pakken, maar het breekt gewoon.

Bedankt voor alle suggesties.

0
Gebruik een HTML-parser en al uw problemen verdwijnen.
toegevoegd de auteur nickb, de bron

1 antwoord

You should have a look to this class instead: http://simplehtmldom.sourceforge.net/

0
toegevoegd