Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : RegExps zum Erstellen einer if-Abfrage



dead_orc
13.02.2005, 17:46
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:

$data = preg_replace('#\{if\((.+)\)\}(.+)\{endif\}#e', "((\\1) ? \"\\2\" : '');", $data);
Leider habe ich keine Ahnung, wie die Ersetzung aussehen soll!
Pls hlp! :confused:

[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!

Chocwise
13.02.2005, 20:02
...[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. ;)

dead_orc
14.02.2005, 14:43
Von mir aus, denn hab ich noch einen Post mehr:
@if-Schleife mit RegExp

<?php
#...
$data = preg_replace('#\{if\((.+)\)\}(.+)\{endif\}#Use', "((\\1) ? \"\\2\" : '')", $data);
#...

Ich hoffe ich werde nicht auch noch verknackt das zu erklären ;)

@Globalisierungsliste:

<?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...

Jesus_666
14.02.2005, 19:12
Schon mal stripslashes(string) probiert?

dead_orc
15.02.2005, 13:39
Jo, doch damit bearbeitet er nur den Regulären Ausdruck und nicht das, was rauskommt (\\1 bzw. $1 werden wohl erst hinterher ersetzt :rolleyes: )

Jesus_666
15.02.2005, 13:47
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.

dead_orc
15.02.2005, 14:15
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).