[PHP / RegExp] .+ bezorgt me hoofdpijn, veel hoofdpijn *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Ik trek een stuk html uit de database
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<p class="image">
  <a name="figsId_478"></a>
  <img src=\"http://www.mysite.nl/~rekcor/edictate_mirror/content/image/4_002.gif\" alt="Dehydrogenation of ortho-diphenols (in this example cathechol) to ortho-quinones.  This reaction is called the catecholase-type." /><br />
  <span class="legend">Figure %fig_478%. Dehydrogenation of ortho-diphenols (in this example cathechol) to ortho-quinones.  This reaction is called the catecholase-type. </span>
</p>

<p class="image"><a name="figId_482"></a>
  <img src="http://www.mysite.nl/~rekcor/edictate_mirror/content/image/4_006.gif" alt="Reduction of quinones by L-ascorbic acid." /><br /><span class="legend">Figure %fig_482%. Reduction of quinones by L-ascorbic acid.</span></p><p class="image">&nbsp;
</p>

  <p class="image"><a name="figId_52"></a><img src="http://www.mysite.nl/~rekcor/edictate_mirror/content/image/1_003.gif" alt="Projection formulas of D-glucose, D-galactose, D-xylose and D-fructose." /><br />
  <span class="legend">Figure %fig_52%. Projection formulas of D-glucose, D-galactose, D-xylose and D-fructose. </span>
</p>


Nu wil ik: <p class="image">....</p> vervangen door iets anders, te weten door een soort pseudotag: %imageFile_<bestandsnaam>%. In het eerste geval dus: %imageFile_4_002.gif%.

Probleem: dit lukt voor geen meter. Mijn needle is in PHP

PHP:
1
$sNeedle   = '/<p class=\\\?"image\\\?">.+<img.+src=.+'.basename($sImageFilename).'.+<br \/>(.+)?\/p>/i';


Het probleem zit hem in de eerste ".+", die er voor zorgt dat hij vanaf de eerste <p class=.... tot aan de laatste <img src=.... matched (ipv tot aan de <img src... in de eerste paragraaf). Maar ik weet niet hoe ik het anders moet aanpakken.

Iemand een idee?

EDIT. De backslashes in de html worden door een third-party script erin gegooid, ik moet die dus ook opnemen in mijn reguliere expressie

[ Voor 4% gewijzigd door Rekcor op 04-03-2008 15:27 ]


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Probeer eens de ungreedy modifier (U).
Die plaats je dan achter je case insensitive modifier (i).

Kijk even naar de modifiers op php.net. :)

Die slashes komen door het magic_quotes directive (waarschijnlijk) en kan je ongedaan maken met stripslashes();

[ Voor 49% gewijzigd door Gonadan op 04-03-2008 15:29 ]

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Je gaat me toch niet vertellen dat ik nu al de hele ochtend en middag aan het prutsen ben vanwege 1 letter u?

Mmm... het lijkt er wel op :(

Even testen... jup hij werkt, bedankt! _/-\o_

[ Voor 14% gewijzigd door Rekcor op 04-03-2008 16:15 ]