匹配最里面的大括号与正则表达式或strpos?

时间:2010-03-16 15:20:04

标签: regex cakephp braces

我有一种迷你解析语法,我帮助我简化了cakephp中的视图代码。基本上我已经创建了一个表助手,当给定数据集和(可选)一组用于格式化数据的选项时,将呈现出一个表,而不是通过循环数据并手动编辑它。

它允许用户像他们喜欢的那样复杂或简单,它可以变得非常强大。但是,为了实现这一点,我不得不做一个简单的解析语法。作为一个简单的例子,用户可以这样做:

$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?

这是我的正则表达式:

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

2 个答案:

答案 0 :(得分:1)

只需将左大括号添加到否定的角色类:

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

答案 1 :(得分: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')

);