Array waarde uitlezen met reg. ex

Pagina: 1
Acties:

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21:13
Het volgende stukje code:

PHP:
1
2
3
4
5
<?php

$this->all_lines[$value] = eregi_replace ("(\{)(.*)(\})",$this->items["\\2"],$key);

?>


werkt dus niet. De bedoeling: de string die tussen curly brackets staat ({}) staat ook in een array (in mijn voorbeeld tenminste) als key, en de waarde die onder die key in de array staat wil graag hebben. Uhmmm even beter uitgelegd:
* in $items staat een waarde: $items['bla'] = "hallo";
* wanneer er in $key {bla} gevonden wordt moet dit vervangen worden door "hallo".
Op dit moment werkt het wel als ik 'bla' vervang door \\2, maar dat is natuurlijk niet de bedoeling. Hoe krijg ik 'm zover dat ie eerst die \\2 vervangt door de reg.ex en dan pas het element opzoekt? :? Hulp!

Sorry voor de verkeerde topictitel trouwens, even te snel geweest.

[ Voor 13% gewijzigd door jsiegmund op 20-04-2003 15:24 . Reden: tags veranderd ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 21-08 17:05
code:
1
2
3
4
5
$this->all_lines[$value] = preg_replace ("/\{(.*)\}/e","vervang('\\1')",$key); 

function vervang($tekst){
return($this->items[$tekst]);
}


Zou volgens mij moeten werken...

Mmmmm |:(
Hier ontstaat natuurlijk een probleem....
Als vervang een method is van '$this' dan moet ie anders aangeroepen worden.....
Maar $this->vervang in de preg_replace werkt (volgens mij) niet....(vanwege de '$' in de method-call) dus moet de 'vervang' een 'globale' functie zijn en kun je daarin weer niet verwijzen naar $this...
:X
Maar hopelijk helpt het je in de goede richting...
(misschien kun je een naamverwijzing naar het object meegeven in de functie.)
code:
1
.... vervang('\\1','objectnaam') ...

[ Voor 72% gewijzigd door beetle71 op 20-04-2003 17:40 ]


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21:13
Het helpt zeker, maar niet om tot een oplossing te komen :) Dus als je verder nog ideen hebt, of iemand anders; graag!

Het probleem met die aparte functie is dat zo'n subpattern daar niet meer geld (daar gok ik op tenminste), daarom krijg je dan weer /1 oid als string, wat dus niet werkt :)

[ Voor 43% gewijzigd door jsiegmund op 21-04-2003 15:09 ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 21-08 17:05
Heb je dat geprobeerd dan :? (gokken levert meestal geen winst...) bij preg replace kun je met gebruik making van de /e modifier een functie aanroepen met het subpattern erin!! Volgens mij (ik weet het zeker) werkt dat wel, je moet alleen je class->method probleempje nog oplossen...

PHP:
1
2
3
4
5
6
7
8
9
$key="hallo allemaal {hier} is harrie";
echo "origineel: ".$key."<br>";
$test = preg_replace ("/\{(.*)\}/e","vervang('\\1')",$key); 
echo "erna: ".$test;

function vervang($tekst){
    echo "vervang: ". $tekst."<br>";
    return("DAAR");
}


DIT WERKT! Als je hulp krijgt en iemand geeft hulp, dan moet je niet gaan roepen dat het niet werkt als je het niet geprobeerd hebt :( |:(

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

nog een voorbeeldje met preg_replace en de e modifier:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php

$eenArray = array('schaap' => 'wolfabriek op poten');

$eenTextje = 'Er liep eens een {schaap} in de wei';

$eenTextje = preg_replace('/{(.*)}/Uise', '\$eenArray[\'$1\']', $eenTextje);

echo $eenTextje;

?>

Intentionally left blank


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21:13
Okay beetle, je had gelijk maar het was niet de oplossing die ik zocht. En ik heb het heus wel geprobeerd, wees maar niet bang... maar het werkte gewoon niet zoals ik wilde.
De oplossing van Crisp is vele malen beter en komt voor mijn geval uit op het volgende:
PHP:
1
$this->all_lines[$value] = preg_replace('/{(.*)}/Uise', '\$this->items[\'$1\']', $key);


wat perfect werkt, en hetzelfde doet in een lijntje code. Okee ik geef wel toe dat ik die /e modifier niet goed had bekeken terwijl daar de oplossing zat, en dat dat dus ook mn probleem was! Goed het werkt nu; bedankt voor de oplossingen :)
Pagina: 1