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
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
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
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden