Backreferences an Funktion übergeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Backreferences an Funktion übergeben

    Ein kleines Problem mit preg_replace.
    Ich habe folgenden Code:
    PHP-Code:
    return preg_replace("/\{(.+)\}/"gettplvar($1), $tpl); 
    Wenn ich das ganze jetzt aber ablaufen lasse, krieg ich folgenden Fehler:

    Parse error: parse error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in f:\web\forum\admin\templates.php on line 29

    Ich habs auch schon mit eval probiert, kommt aber auf's selbe raus.
    Wie muss die Zeile nun aussehen das $1 an gettplvar übergeben wird?

    edit: $1 in Quotes setzen funzt auch nicht. PHP nimmt immer an, das $1 absolut wär und keine Variable.
    "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

  • #2
    Variablen dürfen nicht mit ner Zahl anfangen (bzw. nur daraus bestehen )

    Kommentar


    • #3
      Hallo,

      dazu musst Du den Modifier "e" benutzen. Auszug aus dem Manual (http://www.php.net/manual/de/pcre.pattern.modifiers.php):
      e
      If this modifier is set, preg_replace() does normal substitution of backreferences in the replacement string, evaluates it as PHP code, and uses the result for replacing the search string.

      Only preg_replace() uses this modifier; it is ignored by other PCRE functions.
      Ausserdem würde ich das ganze "ungreedy" machen (mit "U") sonst ersetzt er nicht die einzelnen Platzhalter, sondern alles was zwischen dem { des ersten Platzhalters und dem } des letzten Platzhalters steht.

      Das ganze sollte dann so aussehen:
      Code:
      return preg_replace("/{(.+)}/eU", "gettplvar(\\1)", $tpl);
      Gruß Jan

      Kommentar


      • #4
        Jo, danke dir.
        (*spricht auf's Diktiergerät*: "Notiz: nächstes mal in's Manual gucken")
        "Ach was soll's? Dann bau ich mir halt meinen eigenen Vergnügungspark mit Blackjack und Nutten." - Bender

        Kommentar

        Lädt...
        X