Toon posts:

[php]Regexen op tables

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een php script om tables uit te lezen. Het doel is om uit de tables de waardes te halen en in een database zetten. Het database gedeelte is later een zorg :). Dit is een stukje html wat moet uigelezen worden.
PHP:
1
2
3
4
5
6
7
<?
<tr>
    <td>Doe Maar</td>
    <td>De Bom</td>
    <td><a href='javascript:void(0);' onclick="javascript:JSopenWindow('http://urltje')',500,450)">Link</a></td>
</tr>
?>

Dit herhaalt zich een aantal keer. Voor de eerste 2 td's begrijp ik niet hoe ik deze in aparte variablen kan zitten, omdat de tekst hierin van alles kan zijn. Dit is de php code die ik tot nu toe heb:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$file = fopen("$bestand.html","r");
$test=FALSE;
if (!$file){
   echo "Fout op de pagina\n";
exit;
}
while (!feof($file)){
   $edit = fgets($file, 3000);
   if (eregi("<tr>" , $edit)) {$test = TRUE;};
   if (eregi("</tr>" , $edit)) {$test = FALSE;};
   if ($test == TRUE){
      $edit = eregi_replace( "(http://)(.*)(',500,450)", "<waarde3>\\2</waarde3>", $edit );
      PRINT "$edit\n\n";
   }
}
?>

Heeft iemand een id hoe je dit met de eerste 2 td's moet doen?

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Ik zou drie arrays maken: artiest, liedje en link en matchen met behulp van preg_match_all.

De eerste match alsvolgt: hetgeen tussen "<tr><td>" en "</td><td>" staat, ungreedy uiteraard (door de <tr> weet je dat je de eerste cel hebt in de row).

De tweede laat je matchen op hetgeen tussen </td><td> en </td><td> staat, zodat je weet dat je de middelste cel hebt.

De derde laat je matchen op wat tussen </td><td> en </td><td></tr> staat, waar de </tr> je de zekerheid geeft dat je de laatste cel in de row hebt. Deze laatste kun je ook gewoon de <a href="javascript:blabla">$match</a> laten pakken, of de link tag kun je er verderop in je script met een andere regexp uitfilteren, is misschien overzichtelijker.

Dit is volgens mij wel een redelijk waterdichte methode zolang er niet veel andere irrelevante cellen zijn op de pagina. Ik hoop dat je een beetje begrijpt wat ik allemaal bedoel :)

Overigens in je eerste stukje code, die link naar die javascript functie, staat een ) niet helemaal op zijn plekje.

Verwijderd

Topicstarter
Op vrijdag 14 september 2001 00:00 schreef 2 het volgende:
De eerste match alsvolgt: hetgeen tussen "<tr><td>" en "</td><td>" staat, ungreedy uiteraard (door de <tr> weet je dat je de eerste cel hebt in de row).
Goed idee, alleen hoe werkt dat ungreedy, dat begrijp ik niet echt. Ik heb het matchen van "<tr><td>" geprobeerd alleen het lukt niet echt door de enters en spaties. Ik heb met chop en trim er wat uit kunnen halen alleen dan blijven er helaas nog steeds 2 enters over. \n\n's in de regex werkte niet en een (.*) ook niet.

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Post eens de regexp die je nu gebruikt.

Ungreedy kun je hem maken mbv een ?, dus ipv .* gebruik je .*? of bijvoorbeeld .+?

Bijvoorbeeld, <.*?> om iets tussen < > te matchen, zonder dat hij als afsluiting van de match een > ergens verderop in de string pakt ipv de eerste die na de openende < komt.