/**類別名為Smarty是自訂的模板引擎透過該類別物件載入範本檔案並解析,解析後的結果輸出 */class Smarty {public $template_dir = 'templates'; //定義模板文件存放的目錄 public $compile_dir = 'templates_c'; / /定義透過範本引擎組合後檔案存放目錄public $left_delimiter = ' public $) ter5;在模板中嵌入動態資料變數的右邊定界符號private $tpl_vars = array(); //內部使用的臨時變數) ** tpl_var , $value = null) { if ($tpl_var != '') } /**將PHP中分配的值會儲存到成員屬性$tpl_vars中,用於將板中對應的變數進行替換 @paramstring$tplvarvar@paramstring$tpl下標,要和模板中的變數名稱對應 @parammixed$value需要一個標量類型的值,用來分配給模板中變數的值 需要一個標量類型的值,用來分配給模板中變數的值 * / function display($fileName) { /* 到指定的目錄中尋找範本檔案*/$tplFile處理過的範本檔案不存在,則退出並回報錯誤*/if(!file_exists($tplFile)) { die("存在於$t*");} /* 取得組合中的範本文件,檔案中的內容都是已取代的*/_$comFileName = $this->compile_dir.Name/com_ 。 )) {/* 呼叫內部替換範本方法*/$repContent = $this->tpl_replace(file_get_contents($tplFile)); /* 存檔由系統組合後的腳本檔案? file_put_contents($comFileName, $repContent);}/* 包含處理後的範本檔案輸出給客戶端*/include($comFile); } /**內部使用的私有方法,使用正規表示式將範本檔案''中的語句替換為對應的值或PHP程式碼 @paramstring@paramstring文件中讀入的全部內容字串 @return$repContent回傳替換後的字串*/private function tpl_replace($content) {/* 將左右定界符號中,有影響正則的特殊符號轉義 例如,轉義例如, */$left = preg_quote($this->left_delimiter, '/');$right = preg_quote($this->right_delimiter, '/');$right = preg_quote($this->right_delimiter, '/');模板中各種識別符的正規表示式的模式數組*/$pattern = array( /* 匹配模板中變數,例如,"" /* 匹配模板中變數,例如,"" /*//*/ '.$left.'s*$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s*'.$right.'/i', /* 匹配模板中if標識符,例如" " */'/'.$left.'s* ifs*(.+?)s*'.$right.'(.+?)'.$left.'s*/ifs*'.$right.'/ies', /* 匹配elseif標識符, 例如"" */'/'.$left.'s*elses*ifs*(.+?)s*'.$right.'/ies ', /* 匹配else標識符, 例如"" */'/'.$left.'s*elses*'.$right.'/is', /* 用來匹配模板中的loop標識符,用來遍歷數組中的值, 例如" " */'/'.$left. 's*loops+$(S+)s+$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s*'.$right.'(.+?)'.$left .'s*/loops*'.$right.'/is',/* 用來遍歷數組中的鍵和值,例如" $value }> " */'/'.$left.'s*loops+$(S+)s+$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s *=>s*$(S+)s*'.$right.'(.+?)'.$left.'s*/loop s*'.$right.'/is', /* 匹配include標識符, 例如,'' */'/'.$left.'s*includes+["']?(.+?)["']?s *'.$right.'/ie' );*/*中使用正則的表達式/place /* 替換模板中的變數tpl_vars["var"]; */'tpl_vars["${1}"]; ?> ', /* 替換模板中的if字串 */'$this->stripvtags('','${2}')', /* 取代elseif的字串 */'$this->stripvtags('',"")', /* 替換else的字串 */'', /* 以下兩個用來取代模板中的loop識別碼為foreach格式*/'tpl_vars["${1}"] as $this->tpl_vars["$ {2}"]) { ?>${3}', 'tpl_vars["${1}"] as $this->tpl_vars["${2}"] => $this->tpl_vars["$ {3}"]) { ?>${4}', /*替換include的字串*/'file_get_contents($this->template_dir."/${1 }")' );/* 使用正規替換函數處理 */$repContent = preg_replace($pattern, $replacement, $content); /* 如果還有要替換的標識,遞歸調用自己再次替換*/if(preg_match('/'.$left.'([^('.$right.')]{ 1,})'.$right.'/', $repContent)) { $repContent = $this->tpl_replace($repContent); } /* 返回替換後的字串 */return $repContent; } /**內部使用的私人方法,用來將條件語句中使用的變數替換為對應的值@paramstring$expr 提供範本中條件語句的開始標記中條件string$statement 提供範本中條件語句的結束標記 @returnstrin將處理後的條件語句連接後傳回strin*/< $ var_pattern = '/s*$([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)s*/is'; /* 將變數替換為值*//* 將變數替換為值*//* 將變數替換為值*/ $expr = preg_replace($var_pattern, '$this->tpl_vars["${1}"]', $expr); /* 將開始標記中的引號轉義替換*//* 將開始標記中的引號轉義替換*/$expr = str_replace("\"", """, $expr);/* 替換語句體和結束標記中的引號*/$statement = str_replace("\""", """, $" statement); /* 將處理後的條件語句連接後回傳*/return $expr.$statement; }} 版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 以上就介紹了php正規表示式—仿smarty,包含了方面的內容,希望對PHP教程有興趣的朋友有幫助。 🎜 🎜 🎜