Ben yakın zamana kadar bazı garip eski istemci şablonları ayrıştırmak için oldukça iyi işleyen olmuş bir PHP düzenli ifade var biz kaçan bir soru işareti (\?) Bir şablon ifadesi yer bulunca. Ben ileride olumsuz bir görünüm veya böylece bazı tekno-anlamsızlığından etrafında zayıf şehriye sarmak benim düzenli ifade-fu ile yeterince güçlü değilim, doğru yönde uçlarına ya da noktaları büyük mutluluk duyacağız.
Benim PHP:
preg_match_all("/\{\{IF (.*)\?(.*):(.*)\}\}/U", $template, $m, PREG_SET_ORDER);
Ben bu soruyu yayınlanmıştır Tamam, ben biraz bunalmış. Bana uygun bir bağlam içine koymak için izin verin.
Şablon kod şöyle görünür:
{{IF VAR?"SHOW: THIS?":"SHOW {{ELSE}}"}}
: Olarak çözümlenen hangi
if ($template[$var]) {
echo "SHOW: THIS?";
} else {
echo "SHOW ".$template['ELSE'];
}
Şu anda neredeyse benim fonksiyonu ile bu elde değil, tamamen duyuyorum. Bu fonksiyonu şudur:
preg_match_all("/\{\{IF ((?:[^\\?]|\\.)*)\?((?:[^\\:]|\\.)*):(.*)\}\}[^<\/]/", $template, $m, PREG_SET_ORDER);
if (count($m)) {
foreach ($m as $o) {
if (preg_match("/(.*)\s+(==|!=)\s+(.*)/", $o[1], $x)) {
if (preg_match("/^\"(.*)\"/", $x[1], $cx)) $e1 = $cx[1];
else $e1 = is_numeric($x[1])?$x[1]:$data[$x[1]];
if (preg_match("/^\"(.*)\"/", $x[3], $cx)) $e2 = $cx[1];
else $e2 = is_numeric($x[3])?$x[3]:$data[$x[3]];
if (preg_match("/^\"(.*)\"/", $o[2], $ox)) $er[0] = $ox[1];
else $er[0] = addslashes(htmlspecialchars($data[$o[2]]));
if (preg_match("/^\"(.*)\"/", $o[3], $ox)) $er[1] = $ox[1];
else $er[1] = addslashes(htmlspecialchars($data[$o[3]]));
$eval = "\$od = (\"$e1\" $x[2] \"$e2\")?\"$er[0]\":\"$er[1]\";";
eval($eval);
} else {
$od = $data[$o[1]]?$o[2]:$o[3];
if (preg_match("/^\"(.*)\"/", $od, $x)) $od = $x[1];
else $od = $data[$od];
}
$template = str_replace($o[0], $od, $template);
}
}
if (is_array($data))
foreach ($data as $k => $v) $template = str_replace('{{'.$k.'}}', $v, $template);
return $template;