2013-08-03 2 views
0

Я играю вокруг, пытаясь сделать небольшой шаблонный класс и я бегу в небольшие проблемы
Я пытаюсь соответствовать этому вложенного циклаPHP вложенный цикл

<ul> 
    {each $nestedArr} 
     <li>{$group}</li> 

     <ul> 
      {each $users} 
       <li>{$name}</li> 
      {/each} 
     </ul> 

    {/each} 
</ul> 

Что я получил до сих пор является это

preg_match('/{each \$nestedArr}(?:(?R)|(.*?)){\/each}/is', $this->buffer, $match); 

Но проблема заключается в том, что он останавливается на первом закрытии {/} каждого
Любые советы о том, как я могу это исправить?

Для conviniance я также добавил на regex101

+0

Просто из любопытства, почему вы пытаетесь это сделать? Почему бы не использовать Symfony или что-то еще? – putvande

+1

@putvande: Symfony - это полный каркас или число, если компоненты отличаются. Я думаю, вы имеете в виду компонент [Twig] (http://twig.sensiolabs.org/). Тем не менее я согласен ... Если это не чисто учебный опыт, вам лучше использовать Twig или Smarty, а затем добавить любую функциональность, в которой вы нуждаетесь, что не существует, расширяя. – prodigitalson

+0

это действительно просто для практики, но даже в этом случае интересно знать, как это работает –

ответ

1

Если вы заинтересованы в том, как вы можете использовать регулярные выражения, чтобы сделать это читать, но, как отмечено в комментариях вы лучше использовать некоторые хорошо испытанный компонент для этого в производстве (который, вероятно, использует лучший способ анализа кода).

Чтобы соответствовать вложенному {each $...} тегов Вы could use this:

/{each\ \$\w+} (?: [^{] | {(?!\/?each) | (?R))* {\/each}/x 

Но это не соответствует определенному тегу, как вы, кажется, хотят.

Чтобы сделать это, вы could use:

/(?={each\ \$nestedArr}) ({each\ \$\w+} (?: [^{] | {(?!\/?each) | (?1))* {\/each})/x 
+0

По-прежнему кажется, что до первого {/ each}, нужно ли следить за чем-нибудь еще? –

+0

@ionutvmi, oops, добавил '}' по какой-то причине после того, как я протестировал. Исправлена. – Qtax

+0

Благодарим за помощь –

Смежные вопросы