2010-03-16 51 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') 

);