Kleine <IF> Abfrage mit preg_replace

ev0lst

Erfahrenes Mitglied
Hallo,

ich wollte einmal folgendes probieren...

PHP:
$val = preg_replace("/\[IF (.*?)\=\/(.*?)\/]/e", "<b>\1</b> - \2", $value);

Strukturiert ist das ganze so:

[IF 1=2]

Kann mir jemand sagen, warum ich immer nur "out" raus bekomme?

PS: Gibt es irgendwo eine Seite wo das ganze Regex-Zeug mal erklärt ist richtig? Ich blicke da nie durch... schon so lange verstehe ich das net :)
 
Ich habe es mal so probiert:

PHP:
$val = preg_replace("/\[IF (.*?)=(.*?)\]/", "<b>\1</b>", $value);

Bekomme nur ein "out" ausgegeben... wieso?
 
PHP:
$val = preg_replace("/\[IF (.*?)=(.*?)\]/", "<b>\\1</b>", $value);
Gehören da zur 1 nicht zwei Backslash?
 
Also bei mir funktioniert das...
PHP:
<?php

$value = "[IF TEST=BLA]";

$val = preg_replace("/\[IF (.*?)=(.*?)\]/", "<b>\\1 - \\2</b>", $value);  

echo $val;
?>
Ausgabe:
HTML:
<b>TEST - BLA</b>

Oder was versuchst du zu erreichen...?
 
Ah super :)

Es hat funktioniert... meine Doofheit hatte mal wieder gesiegt :)
Ich hatte den Wert nur mit return ausgegeben... jetzt mit echo.

Nun habe ich vor das ganze etwas zu erweitern:

PHP:
preg_replace('/\<IF (.*?)=(.*?)\>(.*?)\<ELSE>(.*?)\</IF>/', '\1', '\2', '\3', '\4', $value);

Wie kann ich da vorgehen, es geht nämlich nicht :)
 
Ok, ich habe es hinbekommen :)

HTML:
'/\{IF (.*?) == (.*?)\}(.*?)\{ELSE}(.*?)\{\/IF}/e'

Wie kann ich den Operator noch mitgeben? Also, dass ich nicht nur "==" nehmen kann, sondern auch "<", ">", "!=" usw... ?!

Also es geht mir nur darum, dass ich das mit dem Regex-Zeug machen kann und nichts anderes angegeben werden kann. Und auch eine "else" Regel, damit es überhaupt zu einer alternativen Prüfung kommen kann...

danke!

PS: Danke für eure super Hilfe
 
PHP:
preg_replace('@\{IF\s*(.*?)\s*([!=]==?|[<>]=?)\s*(.*?)\s*\}(.*?)\{ELSE\}(.*?)\{/IF\}@e', 'evaluateIf("\1", "\3", "\2")', $string)
Der (fiktiven) evaluateIf()-Funktion wird als erster Parameter der erst Ausdruck, also zweiter der zweite Ausdruck und als ditten der Vergleichsoperator übergeben. Den Zuweisungsoperator habe ich gleich außenvor gelassen.
 
Sind es nicht 5 Werte?!

Wie sollte ich die Prüfung der Operatoren am besten machen?

if($operator == '==') ?

Ist es irgendwie möglich, dass ich den freien Platz zwischen {ELSE} usw schneiden kann, sodass ich es über mehrere Zeilen handeln kann?

Also, dass eine Struktur in der Form möglich ist:

{IF}
muh
{ELSE}
nicht muh
{/IF}

bisher geht es ja nur so:

{IF}muh{ELSE}nicht muh{/IF}
 
Zurück