2009-04-02 11 views
0

Я хотел бы воспроизвести комплимент «Smarty foreach».Воспроизводить Smarty foreach с Php preg_match_all

ЛТФ содержимое файла ($ tplContent):

{foreach from=$tabMethodTest item=entry} 
    /** 
    * @todo Implement test{$entry.name}(). 
    */ 
    public function test{$entry.name}() { 
     $this->markTestIncomplete("This test has not been implemented yet."); 
    } 
{/foreach} 

Код preg_match_all является:

preg_match_all("/(.*)\{foreach(.*)\}(.*)\{\/foreach\}(.*)/im",$tplContent,$regsTplResult); 
print_r($regsTplResult); 

print_r возвращение:

Array 
(
    [0] => Array 
     (
     ) 

    [1] => Array 
     (
     ) 

    [2] => Array 
     (
     ) 

    [3] => Array 
     (
     ) 

    [4] => Array 
     (
     ) 

) 

Как я могу вернуть код между {foreach} {/ foreach}?

ответ

0

Я не очень понимаю, что вы делаете на всех, но это похоже на работу:

$tplContent = "{foreach from=\$tabMethodTest item=entry}\nHello\n{/foreach}"; 
$pattern = '/\{foreach from=\$tabMethodTest item=entry\}[\r\n]{1,2}(.*)[\r\n]{1,2}\{\/foreach\}/im'; 
preg_match_all($pattern,$tplContent,$regsTplResult); 
print_r($regsTplResult); 
+0

Этот шаблон не работает :( –

+0

Извините, мой синтаксис должен быть плохим, я отредактирую через минуту после того, как я действительно проверил. –

+0

Извините, это нормально, но я думаю, что это настоящая я использую контент, который создал проблему Лем. Я обновляю свой вопрос. –

0

Я нашел, как. Проблема возникает в \ г \ п:

$pattern = '/\{foreach from=\$tabMethodTest item=entry\}(.*)\{\/foreach\}/im'; 
$tplContent = preg_replace("/[\n\r]/","",$tplClassTestContent); 
preg_match_all($pattern,$tplContent,$regsTplResult); 
print_r($regsTplResult); 

Результат:

Array 
(
    [0] => Array 
     (
      [0] => {foreach from=$tabMethodTest item=entry} /**  * @todo Implement test{$entry.name}().  */ public function test{$entry.name}() {  $this->markTestIncomplete("This test has not been implemented yet."); } {/foreach} 
     ) 

    [1] => Array 
     (
      [0] => /**  * @todo Implement test{$entry.name}().  */ public function test{$entry.name}() {  $this->markTestIncomplete("This test has not been implemented yet."); }  
     ) 

) 

результат, что я хочу в $ regsTplResult [1] [0]

Благодаря «Чад Birch ";)

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

  • Нет связанных вопросов^_^