模板引擎同時處理{{foo}}
和{{{bar}}}
,它們對應於不同的處理。創建互斥,不重疊的正則表達式
目前,源處理preg_replace
就像這樣:{{\s*(.+?)\s*}}
和{{{\s*(.+?)\s*}}}
。
問題是,這些正則表達式重疊,例如, {{\s*(.+?)\s*}}
匹配{{{bar}}}
。
重要提示:標記{{
,{{{
,}}
,}}}
是用戶可配置的實際代碼。所以通常的解決方案如[^{}]
不能使用。
目前的解決方案是「前{{ }}
S」 s到取代{{{ }}}
,但是這並不足夠強大的。的確,標記是用戶可配置的,用戶可以很容易地將標記設置爲破壞應用的值。
我試圖讓robuster正則表達式是互斥的,而不是順序依賴。我已經嘗試過使用斷言,條件等,但沒有成功。任何幫助將不勝感激。
順便說一句,使用正則表達式不是強制性的,只要代碼不會變得過長。
剛剛被授權增加「laravel」中的可見性,如果你想要模板引擎標籤,也許將其換成刀片式。 – 2013-05-01 08:28:07