Ergebnis 1 bis 7 von 7

Thema: RegExps zum Erstellen einer if-Abfrage

  1. #1

    RegExps zum Erstellen einer if-Abfrage

    Ich hasse sie -.-
    Also: Ich möchte ein Template-System machen. Da muss natürlich eine if-Möglichkeit bei sein. Mein aktueller Code sieht so aus:
    PHP-Code:
    $data preg_replace('#\{if\((.+)\)\}(.+)\{endif\}#e'"((\\1) ? \"\\2\" : '');"$data); 
    Leider habe ich keine Ahnung, wie die Ersetzung aussehen soll!
    Pls hlp!

    [EDIT]
    OK, habs nu doch noch hinbekommen!
    Andere Frage: Wie kann ich eine Liste von Variablen zusammenstellen, die ich dann später globalisiere?

    [EDIT²]
    Klasse, ein Monolog!
    Also, @Mods: Please del!
    Hab auch dieses Problem noch gelöst bekommen!

    Geändert von dead_orc (13.02.2005 um 18:53 Uhr)

  2. #2
    Zitat Zitat von getöteter_ork
    ...[EDIT²]
    Klasse, ein Monolog!
    Also, @Mods: Please del!
    Hab auch dieses Problem noch gelöst bekommen!
    Nö, weil du nu nämlich noch hier reinschreibst, wie du's angestellt hast damit evtl. nachfolgende mit dem selben oder einem ähnlichem Problem hier direkt nachlesen können wie man's löst.

  3. #3
    Von mir aus, denn hab ich noch einen Post mehr:
    @if-Schleife mit RegExp
    PHP-Code:
    <?php
    #...
    $data preg_replace('#\{if\((.+)\)\}(.+)\{endif\}#Use'"((\\1) ? \"\\2\" : '')"$data);
    #...
    Ich hoffe ich werde nicht auch noch verknackt das zu erklären

    @Globalisierungsliste:
    PHP-Code:
    <?php
    function globalize($name)
    {
       
    $this->_globals[] = $name;
    }
    #...
    foreach($this->_globals AS $tmp)
    {
       global $
    $tmp;
    }
    # ...
    ?>
    Die Funktion ist Teil einer Klasse, daher $this->. Die zwei $ sind Absicht

    [EDIT]
    OK, gut dass ich noch ne Erklärung liefern sollte, weil nu habe ich schon wieder ein Problem:
    Bei dem Ersetzungscode oben funktioniert alles gut, wenn die Bedingung beispielsweise "isset($bla)" lautet. Wenn ich jedoch Anführungszeichen benutze (für z.B. "$bla == 'a'") werden die im PHP-Code maskiert "$bla == \'a\'", was natürlich den Interpreter verwirrt. Wie kann ich das unterbinden? Das Hnadbuch gibt langsam nix mehr her...

    Geändert von dead_orc (14.02.2005 um 14:57 Uhr)

  4. #4
    Schon mal stripslashes(string) probiert?

  5. #5
    Jo, doch damit bearbeitet er nur den Regulären Ausdruck und nicht das, was rauskommt (\\1 bzw. $1 werden wohl erst hinterher ersetzt )

  6. #6
    stripslashes() bearbeitet das, worauf du es anwendest. Wenn du se auf den Regexp anwendest wird der Regexp bearbeitet und wenn du es auf das Ergebnis anwendest wird das Ergebnis bearbeitet.

  7. #7
    Schon klar, doch leider gilt das nicht für preg_replace, wenn man damit PHP-Code erzeugt (Modifikator e). Doch wie es schein, verwenden "große" Template-Systeme (wie Smarty) auch nicht die "direkte" Ausgabe von den Template-Dateien, sondern sie cachen die Dateien vorübergehend und geben dann diese Dateien aus - denn werd ich das wohl auch so machen müssen (leider).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •