uepselon: (Perl) (RegExp) Frage zu einem regulären Ausdruck.

Hallo Forum und RegExp Experten,

ich habe ein kleines Problem. Bin gerade dabei ein kleines PHP System zu prgrammieren, welches PHP Code und HTML Code trennt.
in HTML sind statt PHP Variablen nur solche Konstrukte zu sehen, z.B.:

{phpvar}

im PHP Code kann dann die Variable gesetzt werden, z.B.

str_replace("{phpvar}", "$value", $file_as_string);

klappt ja auch ganz gut. Nur ist das System eben ein wenig komplexer und es kann schon mal vorkommen das die ein oder andere {phpvar} im HTML Code nicht ersetzt wird, deshlab will ich zum Schluss alle übrigen {phpvars} auskommentieren. Hab folgendes versucht:

preg_replace("/({.*?})/", "<!-- {\1} -->",  $bufstr);

Klappt auch, aber das große Problem ist, dass evtl. JavaScript Code oder CSS Style der in {} Klammern steht auch auskommentiert wird, dass will ich nicht!

Wie modifiziere ich meinen regulären Ausdruck damit wirklich nur {phpvar} auskommentiert wird, d.h. soblad zwischen { und } ein Leerzeichen, oder sonst ein Sonderzeichen steht, darf es nicht ersetzt werden.

2. Frage, wie ersetzte ich _alle_ {phpvars} in einem Rutsch? mit /../a oder wie ging das noch gleich?

Gruß,
ueps

  1. Hi,

    naja da waren wohl keine Speziallisten da, in der Zeit hab ich selbst ne Lösung gebastelt, für alle die es evtl. später auch mal brauchen könnten:

    $bufstr = preg_replace('/{([^ \t\r\n:;}]+)}/', "<!-- {\1} -->", $bufstr);

    Kommt meinem Wunsch ziemlich nahe, ob es in allen Lebenslagen hilft weiß ich jetzt nicht ganz, zumal ich ein bissl bei der PHPLIB abgeguckt hab. Und mir doch prompt ein Fehler aufgefallen ist.

    In der PHPLIB stehts so drin:

    $bufstr = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- {\1} -->", $bufstr);

    also ohne :;

    Was aber z.B. bei folgendem CSS style zu Problemen führt:

    h1 {color:silver} sieht dann so aus
    h1 <!-- {color:silver} -->

    Man bedenke das bei einem remove der Style ganz weg wäre!

    Hoffe mit :; ist dieses Problem aus der Welt.

    Gruß,
    ueps