Hallo zusammen,
ich entwickel derzeit eine eigene Template Engine und habe nun ein Regex-Problem beim ersetzen. Ich beschreibe mal die Situation:
In einem Template soll ein anderes Template mehrfach eingebunden werden (news.tpl in meinem Beispiel). Daher wollte ich folgenden Ausdruck ersetzen:
Das schreiben des Templates klappt soweit eigentlich, allerdings nicht das ersetzen von {foreach $foobar news.tpl}.
Hier mal der Ausschnitt aus meiner Klasse:
Ich bekomme als Regulären Ausdruck folgendes raus:
Allerdings wird es halt nicht ersetzt. Kann mir da jemand weiterhelfen?
Gruß Radhad
ich entwickel derzeit eine eigene Template Engine und habe nun ein Regex-Problem beim ersetzen. Ich beschreibe mal die Situation:
In einem Template soll ein anderes Template mehrfach eingebunden werden (news.tpl in meinem Beispiel). Daher wollte ich folgenden Ausdruck ersetzen:
Code:
{foreach $foobar news.tpl}
Hier mal der Ausschnitt aus meiner Klasse:
PHP-Code:
/**
* Der linke Delimter für eine Funktion
*
* @access public
* @var string
*/
protected $leftDelimiterF = '{';
/**
* Der rechte Delimter für eine Funktion
*
* @access public
* @var string
*/
protected $rightDelimiterF = '}';
public function replaceFunctions()
{
// foreach Schleife mit 2-Dimensionalen Arrays auflösen
while(preg_match("/".$this->leftDelimiterF."foreach (.*) (.*)".$this->rightDelimiterF."/isUe",
$this->template, $backReference))
{
$varToReplace = substr($backReference[1], 1);
$arrTmp = $this->templateVars[$varToReplace];
$templateUnparsed = file_get_contents($this->templateDir.'/'.$backReference[2]);
for($i = 0; $i < count($arrTmp); $i++)
{
foreach($arrTmp[$i] as $key => $value)
{
$templateUnparsed = str_replace($this->leftDelimiter.$key.$this->rightDelimiter, $value,
$templateUnparsed);
}
}
$this->template = preg_replace("/".$this->leftDelimiterF."foreach \$".$varToReplace." ".
$backReference[2].$this->rightDelimiterF."/isUe", $templateUnparsed, $this->template);
}
}
Code:
/{foreach $foobar news.tpl}/isUe
Gruß Radhad
Kommentar