[php] regex probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • angl2k
  • Registratie: Maart 2001
  • Laatst online: 17-12-2024
met een php regex wil ik een variabele omzetten naar een waarde, bv query[name] naar de waarde van $query["name"]

ik heb het een en ander al zitten rommelen, waarbij ik op het volgende uitkwam

PHP:
1
echo preg_replace("/query\\[(.*?)\]/e","$query['\\1']",$tekst);


alleen dit werkt echter niet ik krijg een parse error :(

de /e modifier zou ervoor moeten zorgen dat ie de replacement als PHP code evalueert, alleen daar gaat dus iets mis

weet iemand de correcte regex hiervoor want ik krijg er de zenuwen van |:(

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Je zult er eerst voor moeten zorgen dat php niet probeert de string al te parsen voordat ie 'm aan de regexp geeft. Nu probeert ie waarschijnlijk eerst de var $query in te vullen waardoor de werkelijke string array()['name'] wordt.

Kijk maar eens wat er gebeurt waneer je
PHP:
1
echo "$query['\\1']";
doet.

Nu moet je alleen nog ff nadenken over hoe je ervoor moet zorgen dat bij die echo er ook werkelijk $query['\1'] uitkomt. (ja \1 idd. Dat je in je code \\1 neer moet zetten heeft met hetzelfde te maken als waar jij nu tegenaan loopt ;) )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • angl2k
  • Registratie: Maart 2001
  • Laatst online: 17-12-2024
ik zat eraan te denken om het anders aan te pakken, nl zo:

eerst query[varnaam] parsen tot $query['varnaam']

en dan een preg_replace daar overheen gooien met als replacement $\1

zodat ie dat dan als een dynamische variabele herkent

[ Voor 0% gewijzigd door angl2k op 11-11-2002 21:58 . Reden: krijg t niet voor mekaar :( ]


Acties:
  • 0 Henk 'm!

  • Chaos
  • Registratie: November 1999
  • Niet online
PHP:
1
echo preg_replace("/query\\[(.*?)\]/e","\$query['\\1']",$tekst);


Zo werkt ie, voor uitleg zie Janoz. :)