Ich schlag mich schon den ganzen mittag mit einem Regulären Ausdruck rum.
Und zwar will ich zur Vorbereitung für das Parsen eines Smarty Templates alle { } durch {rdelim} und {ldelim} ersetzen. Die Funktion ersetzt nicht wie zu erwarten alle Vorkommen, sondern nur eines.
Wie kann man das ändern? Ich hab das auch schon mit preg_replace_callback versucht, aber der liefert auch nur das letzte vorkommen.
Wie man sieht ist das erste { nicht umgesetzt.
PHP-Code:
<?php
$string='<script language="JavaScript"> { { } </script>';
$exp[]='/(<script.*)({(?!=|ldelim|rdelim))(.*<\/script>)/ums';
$exp[]='/(<script.*)((?<!=|ldelim|rdelim)})(.*<\/script>)/ums';
$rpl[]='${1}{ldelim}${3}';
$rpl[]='${1}{rdelim}${3}';
echo var_dump($string=preg_replace($exp,$rpl,$string,-1));
?>
Wie kann man das ändern? Ich hab das auch schon mit preg_replace_callback versucht, aber der liefert auch nur das letzte vorkommen.
string(60) "<script language="JavaScript"> { {ldelim} {rdelim} </script>"
Kommentar