Andavos: preg_replace, etwas in einem Befehl einsetzen

Hallo,
also ich arbeite gerade mit Templates.

Und zwar möchte ich, das {datei} ersetzen wird, und zwar durch das Template der Datei: datei.htm

Ich dachte, dies würde mit preg_replace gehn und habe folgenden Code selber geschreiben:

function ....
{
return $template = preg_replace("/{(.*)}/",gettemplate("\1"),$template);
}

Also mit gettemplate lade ich per implode eine Datei.

Wenn ich den Script aufrufe, erhalte ich die Fehlermeldung:
Warning: file(templates/\1.htm): failed to open stream: No such file or directory in C:\apache\htdocs\php\templates\wbb\engine\class.php on line 6

Er sagt nur, das er die Datei \1.htm (\1) nicht findet.

Hat jemand eine Idee, wie das richtig aussehen muss, bzw. wie man das sonst noch lösen kann?

MFG
Andavos

--
http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  1. Hallo Andavos,

    return $template = preg_replace("/{(.*)}/",gettemplate("\1"),$template);

    versuchs mal mit $1 statt \1. Das \1 (oder auch \2, \3, usw bei mehreren Klammern) ist afaik dafür da, um im regulären Ausdruck selbst den gespeicherten Wert verwenden zu können.

    Grüße aus Nürnberg
    Tobias

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

      hmm geht auch nicht, da versucht er $1.htm zu öffnen

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

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

      MFG
      Andavos

      --
      http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
      1. 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:|