Глубина рекурсии регулярного выражения / PHP

Код PHP

$regex='/\{((?>[^{}]+)|(?R))*\}/';;
$u="{{{text}}}";
preg_match_all($regex,$u,$res);
var_dump($res); 

Выводит

array(2) {
  [0]=>
   array(1) {
   [0]=>
    string(10) "{{{text}}}"
  }
  [1]=>
  array(1) {
   [0]=>
    string(8) "{{text}}"
     }
   }

Не пойму а где рекурсия -то?

Задача : получить что-то типа :

array(4) { 
 [0]=>
  array(1) {
  [0]=>
string(10) "{{{text}}}"
 }
 [1]=>
  array(1) {
   [0]=>
 string(8) "{{text}}"
 }
  [2]=>
  array(1) {
   [0]=>
 string(6) "{text}"
 }
  [3]=>
  array(1) {
   [0]=>
 string(4) "text"
 }

}

Или на худой конец :

 array(2) {
  [0]=>
   array(1) {
   [0]=>
    string(10) "{{{text}}}"
  }
  [1]=>
  array(1) {
   [0]=>
    string(4) "text"
     }
   }    

Это вообще возможно?


Ответы (1 шт):

Автор решения: PN GH

Помещу правильный ответ сюда

$regex='/(?=(?|(\{(?>[^{}]+|(?-1))*})|(?<={)([^{}]+)(?=})))/';
$u="{{{text}}}";
$results = preg_match_all($regex,$u,$res);
var_dump($res[1]);

Результат :

array(4) {
[0]=>
 string(10) "{{{text}}}"
[1]=>
string(8) "{{text}}"
[2]=>
string(6) "{text}"
[3]=>
string(4) "text"
}
→ Ссылка