[php] met regexp een stukkie html filteren

Pagina: 1
Acties:

  • metaal
  • Registratie: Juli 2001
  • Laatst online: 31-01-2025
Ik ben bezig met een scriptje om een html pagina te parsen. Ik wil de rijen uit een tabel vissen. Ik dacht alle html code voor en na de tabel weg te kunnen gooien door dit commando:
code:
1
$result = preg_match("!<TABLE border=0 cellpadding=0 cellspacing=0 width=100%>(.*)</TABLE>!", $content, $matches);

Als ik in $content gewoon "<TABLE border=0 cellpadding=0 cellspacing=0 width=100%>hallo</TABLE>" zet krijg ik netjes in $matches[2] de tekst "hallo". Maar als ik dit uitvoer op de html pagina met daarin de tabel werktie niet. Dan heeftie geen matches. Iemand?

Verwijderd

(.*) moet volgens mij (.*?) worden, zodat hij ook newlines meepikt.

  • metaal
  • Registratie: Juli 2001
  • Laatst online: 31-01-2025
Neej helaas, doet het nog niet. Er schiet me iets te binnen, misschien moet ik dat ook ff voor en achter de exp zetten??--> werknie :'(

Het idd die newline, maar (.*?) helpt niet. Kan dat kloppen???

  • tomato
  • Registratie: November 1999
  • Niet online
? is een greediness modifier, zodat de quantifier * ungreedy ('lazy', al vind ik dat een slechte benaming) wordt. Dit voorkomt dat je bij meerder tabellen in een keer van de eerste openings <table> tot de laatst sluitings </table> matcht.

Het probleem van de newlines heeft hiermee niets te maken. Om een . ook newlines te laten matchen kun je de /s modifier gebruiken, of de punt zo schrijven:
code:
1
(?:.|\n)

Deze laatste optie is waarschijnlijk voor de meeste gevallen nog een stuk sneller te schrijven, maar ik denk niet dat dat hier echt van belang is (gebruik overigens maar gewoon de /s modifier ;)).