[PHP/RegExp] - Een pattern dat <td xxx>xxx</td> matched

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo!

Ben inmiddels een paar uur bezig, maar welk tutorial ik ook probeer, welke combinatie ik ook probeer ... ik krijg het niet voor elkaar :'(

Wat wil ik? Ik heb een stukje HTML, dat er - sterk versimpeld - ongeveer zo uitziet

code:
1
2
3
4
5
6
7
<table>
<tr>
<td style='width:33%'>Dit is de eerste kolom</td>
<td style='width:33%'>Dit is de tweede kolom</td>
<td style='width:33%'>Dit is de derde kolom</td>
</tr>
</table>


Nu wil ik graag de derde kolom uit deze HTML verwijderen.

Wat heb ik nu als regexp patterns geprobeerd?

Deze geeft (logischerwijs) alles tussen de eerste <td ...> en de laatste </td>. Da's dus teveel, want ik wil een pattern dat steeds één kolom teruggeeft, zodat ik simpelweg de laatste kan verwijderen:
code:
1
$td = eregi( '(<td[^>].*>.*</td>)', $str, $matches );



Dit geeft helemaal niets terug:
code:
1
$td = eregi( '(<td[^>].*>.!(</td>)*</td>)', $str, $matches );


Ik weet niet wat ik moet doen ... ergens moet ik bij de "greedy" .* aangeven dat hij NIET mag matches met "</td>". Maar ik weet niet hoe.

Welke koning helpt mij verder? _/-\o_

Alvast bijzonder veel dank!

[ Voor 13% gewijzigd door gvanh op 12-04-2005 15:38 ]


Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
PHP:
1
preg_replace( '#(<td.*?>.*?</td>\n<td.*?>.*?</td>\n)(<td.*?>.*?</td>\n)#si', '$1', $jouw_html_code );

Werkt hiero perfect ;)

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hmmm... dat doet bij mij precies helemaal niets met de string.

code:
1
return '#(<td.*?>.*?</td><td.*?>.*?</td>)(<td.*?>.*?</td>)#si'


De \n heb ik er uitgehaald, omdat er geen newlines staan tussen de </td> en <td> in mijn string. Overigens maakt het geen verschil of ik de newlines wel of niet weergeef.

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
gvanh schreef op dinsdag 12 april 2005 @ 16:04:
Hmmm... dat doet bij mij precies helemaal niets met de string.

code:
1
return '#(<td.*?>.*?</td><td.*?>.*?</td>)(<td.*?>.*?</td>)#si'


De \n heb ik er uitgehaald, omdat er geen newlines staan tussen de </td> en <td> in mijn string. Overigens maakt het geen verschil of ik de newlines wel of niet weergeef.
Wat heb je nu precies gedaan dan?

Ik heb (exact):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$td = '<table>
<tr>
<td style=\'width:33%\'>Dit is de eerste kolom</td>
<td style=\'width:33%\'>Dit is de tweede kolom</td>
<td style=\'width:33%\'>Dit is de derde kolom</td>
</tr>
</table>';

$td = preg_replace( '#(<td.*?>.*?</td>\n<td.*?>.*?</td>\n)(<td.*?>.*?</td>\n)#si', '$1', $td );
print( $td );
?>


En dat werkt precies zoals het zou moeten werken.

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Jouw versie werkt inderdaad wel goed ... maar wanneer ik er dit van maak:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$td = "

<table>

<tr>

<td style='width:33%'>Dit

 is de eerste kolom</td>

<td style=\'width:33%\'>Dit is

    de tweede kolom</td>
    
<td style=\'width:33%\'>Dit is de

    derde kolom</td>
    
</tr>

</table>";

$td = preg_replace( '#(<td.*?>.*?</td>\n<td.*?>.*?</td>\n)(<td.*?>.*?</td>\n)#si', '$1', $td );
print( $td );
?>


Dan werkt het niet meer, schijnbaar omdat er dan newlines in de string staan ... ik snap niet helemaal goed waarom dat is ...

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
Dat kan je makkelijk oplossen door er
PHP:
1
preg_replace( '#(<td.*?>.*?</td>\n*?<td.*?>.*?</td>\n*?)(<td.*?>.*?</td>)#si', '$1', $td );


edit:
Uitleg:
Zo pakt ie 'm ook zonder lege regels en ook met extra lege regels. :)

[ Voor 43% gewijzigd door Huppie op 12-04-2005 16:19 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Haha ... had ik inderdaad ook gevonden met hulp van \s*.

Hij doet het nu inderdaad weer op de teststring, maar weer niet op de string die ik daadwerkelijk gebruik.

De volledige string is momenteel:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<table style="width: 100%; height: 200px;">  <tbody><tr>  <td style="width: 33%;"><span class="Pagina_Hoofd">Theaterplein</span><br>       <br> [img]"/uploads/be22898f21c956521ddbeba415b11d8b"><br>[/img]       <span style="font-weight: bold;">Wanneer:</span> zaterdag 9 april 2005<br>        <br>        <span style="font-weight: bold;">Waar:</span> Kwadrant theater, Zoetermeer<br>       <br>       <span style="font-weight: bold;">Kosten:</span>

€12,50 De VOLLEDIGE opbrengst zal worden gebruikt om de tribune af te
betalen! Ik hoop vele van jullie te zien aanstaande zaterdag en
wellicht kunnen we na afloop in de foyer een gezellig drankje doen!<br>        <br>        <span style="font-weight: bold;">Meer info: </span><a target="_new" href="http://www.greg-baud.nl">www.greg-baud.nl</a><br>       <br> <div style="text-align: left;"><span style="font-weight: bold;"></span><span style="font-weight: bold;">Sentimento.nl </span><span style="font-weight: bold;">®</span></div>       <br> </td>  <td style="width: 33%;"><span style="font-weight: bold;">Greg &amp; Baud productions</span><br>       <br>

Het zoetermeerse amateur-productie huis Greg &amp; Baud maakt al jaren
bijzondere producties waar vele bezoekers zich op het podium of op de
tribunes hebben laten zien. Dit jaar bestaat Greg &amp; Baud 12,5 jaar.
Er worden meer producties gemaakt dan ooit en het Warm Water
Jeugdtheater, dat een onderdeel is van de Greg &amp; Baud, is een groot
succes in Zoetermeer en omstreken.<br>       <br> Greg &amp; Baud
hebben inmiddels van de gemeente Zoetermeer een eigen ruimte toegewezen
gekregen. Op de bijzondere industriele locatie (een oud
distributiecentrum) is een heus theater verrezen, met decor- en kostuum
atelier, repetitieruimtes een ruime foyer en een theaterzaal voor 200
bezoekers. Afgelopen jaar is er een nieuwe tribune aangeschaft, alleen
kampt ook deze enthousiaste amateurproducent met een krappe portemonnee.<br>       <br>
Daarom hebben 7 enthousiaste deelnemers het initiatief genomen om op
ZATERDAG 9 APRIL een benefietavond te organiseren. Het programma
bestaat uit highlights uit Greg &amp; Baud shows vand e afgelopen jaren
en van een aantal Warm Water producties. <br>       <br> </td>  <td style="width: 33%;">Een
aantal voorbeelden: Cyrano, The Scarlet Pimpernel, Oliver!, Malpertuus,
de Vliegende Hollander. Ook wordt er een korte preview gegeven van Jack
the Ripper, juni a.s. te zien in het Buytenpark theater, de
outdoor-locatie van Greg en Baud. Dus heb je me veel plezier een Greg

&amp; Baud show bezocht de afgelopen jaren; kom dan naar het benefiet!<br> </td>  </tr>  </tbody></table><br>

Acties:
  • 0 Henk 'm!

  • Huppie
  • Registratie: Mei 2003
  • Laatst online: 02-09 09:59
edit:
laat maar :X

graag gedaan :D

[ Voor 234% gewijzigd door Huppie op 12-04-2005 16:39 ]

Proud member of TCF - D2OL is zooooo 2005


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Aha! Gelukt. Het was de \n die nog in het laatste deel stond.

Enorm bedankt voor je hulp. Ik dacht echt even dat ik helemaal gek aan het worden was en ik ben superblij dat het nu eindelijk werkt!

1000x dank!
Pagina: 1