preg_replace Text durch Variableninhalt ersetzten

max

Erfahrenes Mitglied
Ich stehe gerade vor einem mehr oder weniger kleinem Problem.

Ich habe einen Text in einer Variable in dem wiederum einige Variablen definiert sind.
Die Variablen im Text sind so definiert: [@variablenname]

Jetzt durchsuche ich diesen Text via preg_replace und jetzt kommt das Problem ich möchte den Teil mit [@variablenname] durch den Inhalt eben dieser Variable (also im Skript $variablenname) ersetzen.

Ich kann leider kein Array aus bestimmten Variablen verwenden die ich ersetzen will, da ich das Ganze so allgemein wie möglich halten will, da ich es öfter benötige.

PHP:
$anrede = "Anrede";
$vName = "Vorname";
$nName = "Nachname";
$email = aaa@bbb.ccc;
$msg = "Inhalt Nachricht";
 
 
$text = "[@anrede]\n\n[@vName] [@nName] hat folgende Nachricht gesendet:\n[@msg]\n\nKontaktdaten:\nVorname: [@vName]\nNachname: [@nName]\nE-Mail: [@email]\n";
 
$pattern = ',\[@([a-zA-Z0-9]*)\],i';
$text_neu = preg_replace($pattern,"$\1",$text);
 
Probier mal Folgendes:
PHP:
preg_replace('/\[@([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\]/ei', '${"\1"}', $string)
Vielleicht sollte zusätzlich noch geprüft werden, ob die Variable überhaupt existent ist. Der Ausdruck „[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*“ entstammt übrigens dem PHP-Handbuch (s. Kapitel über Variablen) und sollte daher nicht verändert werden.
 
Hallo,
wenn du es mit Regulären Ausdrücken lösen willst, dann verwende das hier:
PHP:
<?
$anrede = "Anrede";
$vName = "Vorname";
$nName = "Nachname";
$email = "aaa@bbb.ccc";
$msg = "Inhalt Nachricht";
 
 
$text = "[@anrede]\n\n[@vName] [@nName] hat folgende Nachricht gesendet:\n[@msg]\n\nKontaktdaten:\nVorname: [@vName]\nNachname: [@nName]\nE-Mail: [@email]\n";
$text = nl2br($text);
$text = preg_replace("/\[@([a-zA-Z]+)\]/","$\\1", $text);
eval ("\$text = \"$text\";");
echo $text;
?>

mfg
forsterm
 
Danke für eure Antworten!


@forsterm:
So in die Richtung hatte ich das auch schon aber ich wollte das Ganze ohne eval() lösen, da der Text von einem Kontaktformular kommt.

P.S.: Sorry das ich erst so spät wieder schreibe aber ich brauchte mal etwas Wochenende ;)

EDIT:
@Gumbo:
Ich war leider etwas zu Voreilig mit meinem Post.
Hab gerade deine probiert und die funktioniert wunderbar!

Nochmal Danke!

Also das Ganze sieht jetzt so aus:
PHP:
  <?
  $anrede = "Anrede";
  $vName = "Vorname";
  $nName = "Nachname";
  $email = "aaa@bbb.ccc";
  $msg = "Inhalt Nachricht";
   
   
 $text = "[@anrede]\n\n[@vName] [@nName] hat folgende Nachricht gesendet:\n[@msg]\n\nKontaktdaten:\nVorname: [@vName]\nNachname: [@nName]\nE-Mail: [@email]\n";
  $text = preg_replace('/\[@([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\]/ei', '${"\1"}', $text);
  echo $text;
  ?>
 
Zuletzt bearbeitet:
Zurück