Tobias Kloth: preg_replace, etwas in einem Befehl einsetzen

Beitrag lesen

Hallo Andavos,

Irgendwie muss man dort was mit den Anführungszeichen, glaub ich.

ich glaube der Funktionsaufruf funktioniert nicht richtig (frag mich aber nicht, warum :-))

Bzw. hat jemand eine idee, wie man das evt. noch anders lösen könnte?

ich habe mal eine kleines Script geschrieben:
<script>
 $string='test {bl>a} nix {bl<<<<&"a} texttext';
 preg_match_all("/{([^}]+)}/",$string,$match);
 $von = array();
 $nach = array();
 foreach($match[1] as $eintrag){
   $von[] = '{'.$eintrag.'}';
   $nach[] = text_format($eintrag,'htmlmaskieren');
 }
 echo str_replace($von,$nach,$string);
 //Ausgabe: 'test bl>a nix bl<<<<&"a texttext'
</script>
(text_format() ist eine Funktion von mir, mit der man u.a. in einem String htmleigene Zeichen durch die Entities ersetzen kann)

Das Script sucht sich erst alle Strings*, die innerhalb von geschweiften Klammern vorkommen  und schreibt diese in ein Array (mit Hilfe der Funktion preg_match_all), dann wird die Liste der gefundenen Strings (die dann in $match[1] stehen) durchlaufen, und jeweils ein Eintrag zum Array $von und $nach hinzugefügt. Das Array $von enthält dann alle Strings einschließlich der geschweiften Klammern, und das Array $nach den Text durch den der String mit den geschweiften Klammern ersetzt werden soll (in dem Fall der mit text_format bearbeitete Text). Am Ende wird mit str_replace noch der Inhalt von $von durch den Inhalt von $nach ersetzt.
Ich hoffe, das war das was du gesucht hast :-) Wenn nicht, erläutere mal etwas genauer, was du machen willst, und was die Funktion gettemplate eigentlich macht.

* für Tom (auch wenn es ein einfacher regulärer Ausdruck ist :-)): der Reguläre Ausdruck sucht nach eine Zeichenkette, die mit '{' beginnt, von mindestens einem beliebigen Zeichen (nur kein '}') gefolgt wird, und mit einem '}' endet. Dabei wird das was zwischen '{' und '}' steht gespeichert.

HTH & Grüße,
Tobias

--
Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|