Zum Inhalt springen

preg_replace(): Mit Modifikator "e" Variablen auslesen - funktioniert nicht


Empfohlene Beiträge

Geschrieben (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 von Trex88
Geschrieben

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

Geschrieben (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 von Monty82
Geschrieben (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 von Trex88

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...