Соответствие внутренних скобок с регулярным выражением или strpos? - PullRequest
0 голосов
/ 16 марта 2010

У меня есть своего рода синтаксический синтаксический анализ, который я придумал, чтобы помочь мне упростить мой код представления в 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 ]

1 голос
/ 16 марта 2010

Просто добавьте открывающую скобку к вашему классу отрицанных персонажей:

'/\{:([^{}]+):\}/'
0 голосов
/ 15 февраля 2011
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')

);
...