Treffer durch arrray-element ersetzen

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

  • Treffer durch arrray-element ersetzen

    Hallo allerseits!

    vor kurzem ist eine meiner preg_replace - funktionen in die hose gegangen; das problem habe ich dann ohne regex gelöst, aber mich interessiert es trotzdem, ob es möglich gewesen wäre, so wie ich es mir dachte:
    es gibt ein assoziatives array $data, und einen längeren text. Nun sollen alle vorkommnisse von z.B. !baum! durch $data['baum'] ersetzt werden, woraus dann meinetwegen 'große pflanze' entsteht.

    das war mein ansatz, allerdings wollter der so nicht funktionieren:
    PHP-Code:
    preg_replace('/!(.*)!/',"$data[$1]",$text); 
    ich hab etliche anordnungen der " und $ innerhalb der ersetzung getestet, aber es gab immer einen fehler wie 'unexpected '$', expecting T_STRING or T_VARIABLE or T_NUM_STRING '

    ist das ganze so nicht machbar oder steh ich da grad total aufm schlauch?

    Freundliche Grüße und vielen Dank im vorraus
    Breezzer

  • #2
    Code:
    preg_replace('/!(.*)!/', $data[\$1], $text);
    müsste gehen
    Gruss
    H2O

    Kommentar


    • #3
      Wenn mich nicht alles täuscht, brauchst du dafür den e-Modifier:
      PHP-Code:
      preg_replace('/!(.*)!/e''$data[$1]'$text); 
      PHP-Manual - Pattern Modifiers:
      e (PREG_REPLACE_EVAL)
      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. Single quotes, double quotes, backslashes and NULL chars will be escaped by backslashes in substituted backreferences.

      Only preg_replace() uses this modifier; it is ignored by other PCRE functions.
      Es sei dazu zu sagen, dass ein preg_replace_callback in der Regel um einiges performanter ist, als ein preg_replace mit e-Modifier. Bietet sich die Möglichkeit an, ist erstere Variante vorzuziehen.

      Zu der Regex:
      Nimm mal /!([^!]+)!/
      Wieso? Wir hatten erst vor kurzem ein Thema, in dem das erläutert wurde. Such mal hier im Forum nach Greedy Dot versus Negated Character Classes.

      Grüße
      Zuletzt geändert von Griecherus; 30.05.2008, 12:23.
      Nieder mit der Camel Case-Konvention

      Kommentar


      • #4
        Original geschrieben von Griecherus
        Zu der Regex:
        Nimm mal /!([^!]+)!/
        Wieso? Wir hatten erst vor kurzem ein Thema, in dem das erläutert wurde. Such mal hier im Forum nach Greedy Dot versus Negated Character Classes.

        Grüße [/B]
        wow!
        toller thread, tolle erklärung deinerseits. danke :-)

        dann werd ich es mal als callback umbauen.

        und @H2O:
        nein, das funktioniert leider auch nicht

        Kommentar

        Lädt...
        X