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