[PHP] Pagina met tabellen opdelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een pagina met daarop 8 tot 10 tabbelen. Nu wil ik dmv een functie (denk met reguliere expressie) de pagina inlezen en als het ware de 10 tabellen apart benanderen. Dus een complete tekstpagina scannen, alles behalve de tabellen + content opslaan. Is dit mogelijk want ik krijg het niet voor elkaar. Ik heb reeds iets wat gedeeltelijk werkt:

PHP:
1
2
3
4
$begin = '<table border="0" cellpadding="0" cellspacing="0" width="100%">';
$eind = '</table>';

eregi($begin.'(.*)'.$eind, $input, $content);


In input wordt dus een complete HTML pagina ingeladen. Dus layout en alles erop en eraan. Hieruit wil ik een aantal tabellen benaderen en hergebruiken. Met bovenstaande code wordt 1 resultaat teruggegeven; de eerste table tag tot de laatste /table tag. Oftewel 10 tabellen. Ik wil ze dus alle 10 apart kunnen benanderen. Is dit mogelijk?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
$begin = '<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">';
$eind = '</table>';
$modifier = 'iu';

preg_match('#'.$begin.'(.*)'.$eind.'#/'.modifier, $input, $content);

Zo dan?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Krijg een foutmelding: Unknown modifier '/'

Ben helemaal niet bekend met preg_match en sowieso niet met reguliere expressies. Kan iemand uitleggen wat die $modifier = 'iu'; precies doet en hoe te gebruiken binnen die preg_match.

[ Voor 8% gewijzigd door Verwijderd op 06-05-2005 16:08 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ow, shit, die / hoort daar niet. :X Foutje. :P

i staat voor case insensitive, en u voor ungreedy. Er staat ook een stukje over regular expressions in de P&W FAQ, zie daarvoor P&W FAQ - Regular expressions. :)

Preg_match is overigens voor zover ik weet iets sneller dan ereg(i), vandaar dat ik daar de voorkeur aan geef. Zie ook de documentatie. :)

[ Voor 26% gewijzigd door NMe op 06-05-2005 16:27 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou dat is het hem dus. Ik gebruik t al een tijdje en de simpele zaken gaan over t algemeen wel goed. Heb de FAQ hier al doorgenomen, ook op PHP.net en phpfreakz.nl vanalles, maar dit probleem krijg ik dus niet getakkeld.

Ik wil dus tabel voor tabel door kunnen lopen. Desnoods met meerdere reg. expressies om tot t resultaat te komen....

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$content = '
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel1</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel2</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel3</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel4</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel5</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel6</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel7</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel8</table>';

preg_match_all("#<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">(.*)</table>#iu", $content, $matches);

print_r($matches);

Zo werkt ie bij mij prima. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Nick The Heazk
  • Registratie: Maart 2004
  • Laatst online: 07-09-2024

Nick The Heazk

Zie jij er wat in?

kan je ook herschrijven als:

PHP:
1
2
3
4
5
6
7
<? 
$content = "";
for($i = 1; $i<9; $i++)
   $content .= '<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel{$i}</table>';
preg_match_all("#<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">(.*)</table>#iu", $content, $matches); 
print_r($matches); 
?>


maar als je ze appart wilt benaderen is dit misschien beter;

PHP:
1
2
3
4
5
6
7
8
<? 
for($i = 1; $i<9; $i++)
   {
   $content[$i] = '<table border="0" cellpadding="0" cellspacing="0" width="100%">testtabel{$i}</table>';
   preg_match_all("#<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">(.*)</table>#iu", $content[$i], $matches[$i]);
   print_r($matches[$i]);
   }
?>


zo kan je je matches achteraf als array gebruiken

[ Voor 97% gewijzigd door Nick The Heazk op 06-05-2005 19:32 ]

Performance is a residue of good design.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ehm, je eerste stukje code is misschien korter, maar totaal niet relevant, en je tweede stukje code is gewoon raar... $matches is al een array in de code die ik gaf. Wat heb je aan een array van arrays wanneer dat geen toegevoegde waarde heeft?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Nick The Heazk
  • Registratie: Maart 2004
  • Laatst online: 07-09-2024

Nick The Heazk

Zie jij er wat in?

in de gewone $matches array kan je de 10 tabellen toch niet appart benaderen, of vergis ik me hierin?

Edit: ow daar stond preg_match_all en niet preg_match. Dan creëer ik inderdaad een overbodige array, whoops.

[ Voor 38% gewijzigd door Nick The Heazk op 06-05-2005 19:43 ]

Performance is a residue of good design.

Pagina: 1