Глубина рекурсии регулярного выражения / 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"
}