2010-03-16 83 views
0

我有一種迷你語法分析語法,可以幫助我在cakephp中簡化我的視圖代碼。基本上我創建了一個表幫助程序,當給定一個數據集時,以及(可選)一組關於如何格式化數據的選項將呈現出一個表格,而不是循環數據並手動編輯它。匹配最裏面的括號與正則表達式或strpos?

它允許用戶像他們那樣複雜或簡單,它可以變得非常強大。但是,爲了實現這一點,我不得不做一個簡單的解析語法。作爲一個簡單的例子,用戶會做一些像這樣:

$this->Table->data = $userData; 
$this->Table->elements['td']['data'] = array(
    '{:User.username:}', 
    '{:User.created:}' => array('Time::nice') 
); 
echo $this->Table->render(); 

和渲染表時,那麼就會產生:

<table> 
    <tbody> 
     <tr><td>rich97</td><td>Sun 21st 02:30pm</td></tr> 
    </tbody> 
</table> 

隨後發生的問題,我嘗試拼圖大括號像這樣:

{:User.levels.iconClasses.{:User.access:}:} 

是否有無論如何,我只能得到最內圈的最內圈和循環,雖然直到沒有比賽?或者甚至一氣呵成呢?或者甚至更好地使用strpos?

這裏是我的正則表達式,因爲它代表:

'/\{\:([^}]+)\:\}/' 

回答

1

只需添加左括號你否定字符類:

'/\{:([^{}]+):\}/' 
+0

謝謝,完美的作品! – rich97 2010-03-17 02:18:27

0
var $validate= array(
'name'=>array(
'notEmpty' =>array(
    'rule'=>'notEmpty', 
    'message'=>'Please Enter The Name' 
), 
'isUnique' =>array(
    'rule'=>'isUnique', 
    'message'=>'Name Already Exist' 
) 
), 
'address'=>array(
'rule'=>'notEmpty', 
'message'=>'Please Enter The Address') 

);