Допустим, у меня есть:Deep (бесконечные) расщепленные слова с использованием регулярных выражений
$line = "{This is my {sentence|words} I wrote.}"
Выход:
This is my sentence I wrote.
This is my words I wrote.
Но регулярное выражение должно соответствовать глубокие и иерархические значения и разделить эти значения, например:
$line = "{This is my {sentence|words} I wrote on a {sunny|cold} day.}";
Выход:
This is my sentence I wrote on a sunny day.
This is my sentence I wrote on a cold day.
This is my words I wrote on a sunny day.
This is my words I wrote on a cold day.
Мой первый, хотя делает это более взрываются как в коде ниже, но результат не был соответствующим:
$res = explode("|", $line);
Советы? Спасибо.
EDIT: Что-то в этих строках:
$line = "{This is my {sentence|words} I wrote on a {sunny|cold} day.}";
$regex = "{[^{}]*}";
$match = [];
preg_match($regex, $line, $match);
var_dump($match);
Как уже говорилось, он может пойти на бесконечное, нет предела, то в для цикла необходимо.
Я думаю, что вы можете создать функцию, которая _replaces_ первый матч [ '/ {[^ {}] *} /'] (HTTPS: //regex101.com/r/zV9sX0/1) и возвращает совпадение и его индекс ... Тогда, пока возврат не равен -1, вы продолжаете разрастание '' '... Конечно, вам понадобится массив нажмите каждый новый _sentence_ (состоящий из одного из вложенных значений, вставленных в индекс, возвращаемый функцией) –
$ res = explode ("|", $ line, 2); –
Я предполагаю, что количество вложенных уровней может быть любым, не так ли? Подобно '$ line =" {Это мое {предложение | слова}, которое я написал в {{very | not so} sunny | {freezing | rather} cold} day.} ";' –