Werkt hier prima, als het resultaat <table> moet zijn. :-)
Wees anders even wat duidelijk in het vervolg. Een 'het werkt niet' bestaat praktisch niet. Altijd gebeurt er wat, en dat het werkt. Maar het geeft misschien de verkeerde en onverwachte uitkomst.
Dus wees gewoon concreet in je bericht wat er gebeurt, wat zie ziet, en wat je verwacht. Probeer in je hoofd dus van te voren zoveel mogelijk vragen te beantwoorden voor in dit topic.
?
Onbekende gebruiker
24-02-2026 01:44
bedankt voor het antwoord. Ik heb de code in een losse pagina opgeslagen maar krijg geen resultaat.
Zou toch moeten werjen
[size=xsmall]Toevoeging op 24/02/2026 01:59:36:[/size]
hij doet het wel
de uitkomst is natuurlijk html die ik niet in de pagina zag
Je pattern met een begrenzingsteken hebben. Vaak wordt de / gebruikt, soms een ~. Zelf geef ik (ivm vaak combineren met htmlcode waarin al vaak een / zit) de voorkeur aan #
<?php
$pattern = '# table #';
?>
dat stuk tussen de # moet nog ingevuld worden. Maar ik kan niet opmaken uit het geheel wat je nu probeert te vinden.
"eruit krijgen" kun je opvatten als "dat is het antwoord dat ik wil hebben". Maar ook als "de hele invoer, maar met dat stukje eruitgesneden"
Waarbij je ook nog een ^ zou kunnen plaatsen tussen de # en ( in de $pattern definitie als je wilt afdwingen dat de string begint met "table"en er niets voor staat.
$matches[0] geeft de hele invoer terug. Dat wil je niet, je wilt [1] hebben: datgene dat tussen het eerste paar ( ) staat. (en zo zal [2] je bij een tweede set ( ) de match daarvan geven)
?
Onbekende gebruiker
27-02-2026 16:35
ik probeer een willekeurig aantal tabbellen, gevolgd door de gewenste tabel, gevolgd door weer een aantal tabellen te matchen.
dus je weet dat de string begint met 1 of meer tables die samen gevonden worden.
Daarna is er een table die de property name=grid heeft
en tenslotte nog 1 of meer tables.
<?php
$pattern = '#(table.*table)\s+(table.*?name=grid.*?table)\s+(table.*table)#';
?>
We vinden nu door (table.*table) waarbij geen ? achter .* staat zo veel mogelijk tables. De ? staat voor ungreedy. Die ? heb ik verwijderd en daardoor zoekt hij zo ver mogelijk door.
Daarna staat er (table.*?name=grid.*?table)
Dat betekent dat de eerste grep stopt op het moment dat er een table is met name=grid.
De *? zoekt vanwege de ? naar de eerstvolgende table als afsluiter.
Tenslotte zoeken we nog greedy naar de volgende table waarbij de allerlaatste table de afsluiter is.
Dat kan niet in de herhaling gaan: die laatste * heeft dus geen zin: we zijn bij de eerste keer al direct bij de laatst table aangeland.
?
Onbekende gebruiker
27-02-2026 19:53
thanx voor de reactie. ik begrijp het.
nog een vraag.
als je het non-greedy wil doen,
waarom werkt dit dan niet?
(table.*?table *)*
[size=xsmall]Toevoeging op 28/02/2026 19:03:11:[/size]
misschien is het handig om 1 of meer test-strings te hebben, en even zo veel gewenste uitkomsten te noteren.
Nu verandert steeds de inputstring en is het maar raden welke uitkomst je wenst.
En vooral waarom je dat stuk wilt hebben. (dus welke reden er is: is het het voorlaatste, is het die waar de tekst tussen table en table uit meer dan 1 letter bestaat etc.)