[ubb] [php] preg_replace help needed

Pagina: 1
Acties:

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
oke, ik heb het idee dat ik hiervoor slaag ga krijgen maar toch, ik heb alles doorgezocht maar kan niet echt een oplossing vinden, nou ben ik geen script requester en snap ik preg_paterns en preg_modifiers ook wel voor het grootste deel maar uhm ik weet niet , t lukt niet :( :(

na zelf een strpos parser geschreven te hebben voor dingen als [tag vcar1=value var2='value 4'] en eventueel met endtag en tussenstuk, krijg ik het niet meer voor elkaar om via een nette preg_replace dit op te lossen.

[var='value 1'] of [var=value] of [var="value's and other stuff"]

kan dit in een preg_replace en hoe kan dit? zelf had ik dit al gefixed maar ik loop gewoon vast omdat ik waarschijnlijk te moelijk aan het kijken ben.

er moet dus duidelijk gecheckt worden dat er geen spatie voor de = zit en dat er achter de is een string komt eventueel tussen een set quotes die er af moeten vallen.

de code moet gaan doen:
bovenstaande weghalen en de waarde achter de = zonder de quoes in een array pompen op de plek met als naam het voorste deel
$vars[$1]=$2;

PHP:
1
2
3
4
    $input=preg_replace(
    "/\\[(.*?)=(.*?)\]/se",
    "$vars[$1]=$2",
    $input);


alvast heeeel erg bedankt

openkat.nl al gezien?


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
$vars[$i] in je replace string wordt vervangen door de waarde ervan, dus je krijgt bv. "(waarde)='value 1'". Dat kan php niet evalueren -> fout.

Je moet het dus ff escapen:
PHP:
1
"\$vars['$1'] = $2"


Of enkele quotes gebruiken:
code:
1
'$vars["$1"] = $2'


Zoals je ziet moeten er ook quotes om $1, het is immers een string.

Ohja... je krijgt nu het probleem dat de regex wordt vervangen door de waarde die je aan de variabele geeft ($var = 1 evalueert naar 1). Dit kan je bv oplossen door dit als replacement te gebruiken (beetje een hack):
code:
1
'($vars["$1"] = $2 ? "": "")'

Dit is dus een conditionele expressie die altijd "" als waarde geeft.

Je kunt ook een functie aanroepen die de assignment uitvoert en "" return-t.

[ Voor 0% gewijzigd door marcusk op 17-10-2002 02:47 . Reden: bla bla bla ]


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
woohoo das in ineder geval al wat, nu nog ff een str_replace fnctie ed erom heen en nog een beetje knutselen en dan zijn weer er bijna. alvast bedankt maaaar keep the answers comming.

ik heb nu dus dit:
PHP:
1
2
3
4
    $input=preg_replace(
    "/\\[(.*?)=(.*?)\]/se",
    '($vars["$1"] = $2 ? "": "")',
    $input);


nu moet er dus nog iets komen dat bovenstaande ontdoet van eventueel eerste en laatse quote of dubbelquote

ohja ik mag eigenlijk geen functie gebruiken omdat de array vars in de functie om deze replace gerbuikt moet worden en weer niet in de functie eronder/erboven.

[ Voor 0% gewijzigd door killercow op 17-10-2002 11:32 . Reden: php code erbij gezet ]

openkat.nl al gezien?


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
please? een van de replace goden mischien? dudes?
ik ben er nog niet helemaal :(
ik heb wel door dat je bij de eerste alle caracters - een space kan zoeken :P anders vind hij [object var=iets] ook en dat mag niet.

openkat.nl al gezien?


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
nog niemand? moet ik namen gaan noemen? :P
tomato, tuinhark, acm, drm, (sorry als ik jouw vergeet) komop mensen, of geef me een kick de goede kant op (niet een got ban/kick aub:P ) of vertel waarom het niet kan, dan heb ik iig de moed om zelf een parsertje te maken.

openkat.nl al gezien?


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
sim-pel: (\"|')? = eventueel een enkele of dubbele quote.

eventueel kun je nog met een backreference zorgen dat de 1e en 2e quote hetzelfde moeten zijn (\\1).

  • MisterData
  • Registratie: September 2001
  • Laatst online: 26-08 21:52
offtopic:
/me is toevallig met bezig met z'n eigen stackbased template parser @ http://geemz.dyndns.org/cms/include/tpltest.php *D

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 07-08 19:18
uhm oke cool maar marcusk kun je mij vertellen hoe we die dan ook daadwerkelijk daarin plaatsen ? plz?

openkat.nl al gezien?


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
mja... dat lijkt me vrij logisch... wat heb je zelf al geprobeerd en wat ging er mis?
Pagina: 1