2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
而不是preg_splitorpreg_match我寧愿使用preg_replace_callback,因?yàn)槟谶M(jìn)行替換,并且替換值源自看起來最終將成為另一個(gè)類中的方法的內(nèi)容。
function process_template($template, $begin = '<<', $end = '>>') {
// get $MyClass in the function scope somehow. Maybe pass it as another parameter?
return preg_replace_callback("/$begin(\w+)$end/", function($var) use ($MyClass) {
return $MyClass->get($var[1]);
}, $template);
}
這是一個(gè)可以玩的例子:https : //3v4l.org/N1p03
我認(rèn)為這只是為了好玩/學(xué)習(xí)。如果我真的需要使用模板來做某事,我寧愿從頭開始composer require "twig/twig:^2.0"。事實(shí)上,如果你有興趣了解更多關(guān)于它是如何工作的,你可以去看看一個(gè)完善的系統(tǒng),比如樹枝或刀片。(比我在這個(gè)答案中所做的要好。)

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
周圍有大量的模板引擎,但有時(shí)......只是為一個(gè)可能簡單的事情增加復(fù)雜性和依賴性。這是我用于進(jìn)行一些 javascript 更正的修改示例。這適用于您的模板。
function process_template($html,$b='<<',$e='>>'){
$replace=['this'=>'<input name="this" />','that'=>'<input name="that" />'];
if(preg_match_all('/('.$b.')(.*?)('.$e.')/is',$html,$matches,PREG_SET_ORDER|PREG_OFFSET_CAPTURE)){
$t='';$o=0;
foreach($matches as $m){
//for reference $m[1][0] contains $b, $m[2][0] contains $e
$t.=substr($html,$o,$m[0][1]-$o);
$t.=$replace[$m[2][0]];
$o=$m[3][1]+strlen($m[3][0]);
}
$t.=substr($html,$o);
$html=$t;
}
return $html;
}
$html="
<div>
<<this>>
<<that>>
</div>
";
$new=process_template($html);
echo $new;
出于演示目的,我放置了$replace處理替換的數(shù)組。您可以使用將處理替換的函數(shù)替換它們。
這是一個(gè)工作片段:https : //3v4l.org/MBnbR
我喜歡這個(gè)功能,因?yàn)槟憧梢钥刂铺鎿Q什么以及在最終結(jié)果上放什么。順便說一下,通過在PREG_OFFSET_CAPTURE匹配上使用也返回正則表達(dá)式組發(fā)生的位置。那些在$m[x][1]. 捕獲的文本將在 上$m[x][0]。
- 2 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報(bào)