Trex88 Geschrieben 24. Juni 2008 Geschrieben 24. Juni 2008 (bearbeitet) Hallo Community, ich habe ein Problem mit preg_replace(). Und zwar möchte ich gerne gekennzeichnete Zeichenketten durch eine Variable ersetzen. Beispiel: bla {${asd}} bla PHP soll nun $bla auslesen und an die Stelle von {${bla}} setzen. Das funktioniert nur nicht ganz... Der Code: preg_match_all('/\{\$\{([a-z][0-9_a-z]*)\}\}/i', $cont, $mtch); foreach ($mtch[1] as $val) { global $$val; } $cont = preg_replace('/\{\$\{([a-z][0-9_a-z]*)\}\}/ei', '$\1 ? $\1 : \'<!-- Missing variable: \1 -->\'', $cont);[/PHP] Hier werden zuerst - da der Vorgang in einer Funktion ist - alle Variablen mit global geholt. Danach sollen sie eingesetzt werden. Ganz davon abgesehen, dass es für manche als totaler Humbug erscheinen wird, müsste es eigtl. gehen. Edit: PS: Die Variablen exestieren - daran kanns also nicht liegen. Er ersetzt die Zeichenketten auch, nur halt nicht durch den Wert der Variable, sondern durch ihren Namen. Ich vermute, es liegt am Replace-Parameter, dass ich irgendwas falsch gemacht habe... Weiß jemand, was ich da falsch gemacht habe? Danke schonmal im Vorau! Gruß Trex Bearbeitet 24. Juni 2008 von Trex88 Zitieren
kills Geschrieben 24. Juni 2008 Geschrieben 24. Juni 2008 Hi Trex, dein Beispiel passt irgendwie nicht zu deinem Text.. preg_match_all() <-> preg_replace() $bla <-> $asd was soll da wie ersetzt werden... ? du machst doch gar kein replace? Gruß, Markus Zitieren
Monty82 Geschrieben 25. Juni 2008 Geschrieben 25. Juni 2008 (bearbeitet) Du könntest preg_replace_callback() benutzen: <?php function _replaceVar($_arrMatch) { $mixRes = ''; if (isset($GLOBALS[$_arrMatch[1]])) { $mixRes = $GLOBALS[$_arrMatch[1]]; } return $mixRes; } $strVarTest = 'test'; $intVarTest = 1; $strTest = 'Das ist ein Test mit den Werten {${strVarTest}} und {${intVarTest}}.'; echo $strTest."<hr>"; $strTest = preg_replace_callback('/\{\$\{([^\}]+)\}\}/','_replaceVar',$strTest); echo $strTest; ?> [/PHP] Edit: Ich habe mir gerade mal den e-Modifier angeschaut. Es geht auch so einfacher: [PHP] $strTest = preg_replace('/\{\$\{([^\}]+)\}\}/e','\$GLOBALS[\\1]',$strTest); Ich vermute, Du müsstest in Deinem Beispiel das Dollar-Zeichen escapen und für die Back-Referenz zwei Escape-Zeichen verwenden. Bearbeitet 25. Juni 2008 von Monty82 Zitieren
Trex88 Geschrieben 2. Juli 2008 Autor Geschrieben 2. Juli 2008 (bearbeitet) Hallo, erstmal danke für die Antworten, und sorry für meine etwas verwirrende Beschreibung. Ich meinte $asd an Stelle von $bla und {${asd}} an Stelle von {${bla}}. Leider lag der Fehler ganz woanders, dummerweise habe ich nur den OB - eigentlich zur besseren Übersichtlichkeit gedacht - immer automatisch leeren lassen, wenn ein Fehler auftrat. Dadurch wurde der konkrete Fehler nicht angezeigt und ich habe ein wenig im Dunklen rumgetappt. Trotzdem vielen Dank für eure Mühen! =) Gruß Trex Bearbeitet 2. Juli 2008 von Trex88 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.