Reguläre Ausdrücke geschlossen 

Status
Für weitere Antworten geschlossen.

Snip3r

Urgestein
Registriert
Feb. 2007
Beiträge
2.008
Hallo Leute,

bräuchte mal eure Hilfe bei ner kleinen Template Funktion.

HTML:
false

true
So würde ich das Template gerne nutzen.
Dazu hab ich in einer Funktion, diesen Code genommen, den ich aber gerne um das check="" erweitern würde.
PHP:
function template($file)
{
$f = file_get_contents($file);
$f = str_replace('"','\"',$f);
while(preg_match('/(.*)(if>|(.*)if>)/Uis', $f))
{
$f = preg_replace('/(.*)(if>|(.*)if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $f);
}
return $f;
}
Funktionieren würde damit: false

Ich vermute das liegt an der Klasse auf die ich oben zugreife ($class->var), da > gleichzeitig das Ende der if-Bedingung darstellt.

Kenne mich mit Reg. Ausdrücken nicht besonders aus.
Versucht hab ich schon folgendes, was aber nicht funktionierte:
PHP:
while(preg_match('/(.*)(if>|(.*)if>)/Uis', $f))
{
$f = preg_replace('/(.*)(if>|(.*)if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $f);
}

gruß
snip3r
 
Zuletzt bearbeitet von einem Moderator:
Hi,
habe jetzt nicht bei dir nach Fehlern gesucht, sondern das einfach schnell mal selbst gelöst :p

Mein Bsp.
Code:
 error_reporting(E_ALL);
header('Content-type:text/plain');
echo $f = '


false

true



false

';
echo preg_replace('!(.*?)((.*?))?!is','".(($1)?"$2":"$4")."',$f);
?>

Gruß
Broken Sword
 
Hey Kollege,
danke für deine Antwort.
Hab jetzt (zum testen) einfach deinen Code in ne PHP Datei kopiert, ausgeführt und erhalte folgende Quelltext Ausgabe im Browser. Das echo von $f hab ich entfernt und die Header Angabe auskommentiert.
HTML:
".(($class->var == false">
false

true


 false
":"")."
Normal sollte doch eine Fehlermeldung kommen, oder?

// Erweitere ich das preg_replace um ein \$ sieht der Quelltext so aus:
HTML:
false

true



false
preg_replace:
PHP:
echo preg_replace('!(.*?)((.*?))?!is','".(($1)?"$2":"$4")."',$f);
 
Zuletzt bearbeitet von einem Moderator:
Funtzt alles einwandfrei oO"

Code:
 error_reporting(E_ALL);
header('Content-type:text/plain');
echo $f = '


false

true



false

';
echo preg_replace('!(.*?)((.*?))?!is','".(($1)?"$2":"$4").',$f);
?>
 
Zuletzt bearbeitet von einem Moderator:
Hab die Funktion etwas angepasst.
Und zum Testen einfach mal folgende Variable definiert ($blub = true;)

Template:
HTML:
false

true
Ausgabe im Browser:
false true
Quelltext:
HTML:
false

true
Sollte eigentlich auf else anspringen und nicht auf beides ;)

Die leicht angepasste while Schleife:
PHP:
 while(preg_match('!(.*)(if>|(.*)if>)!Uis', $f))
{
$f = preg_replace('!(.*)(if>|(.*)if>)!Uis', '".( ($1) ? ("$2") : ("$4") )."', $f);
}
 
Danke Broken Sword.
Werd's gleich mal testen...

Es funktioniert. :thx: :thx:

Ich mach dann mal zu :p
=> Closed
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben Unten