Попытка сопоставить все с одним регулярным выражением не слишком далеко, так как регулярные выражения выводят в большинстве случаев список совпадающих позиций подстроки, но не в виде дерева.Вам нужен лексер или грамматика, которая выполняет что-то вроде этого:
Разделите входные данные на токены - атомарные части, такие как '{', '|' и 'world', затем обработайте эти токены по порядку.Начните с пустого дерева с одним корневым узлом.
Каждый раз, когда вы найдете {
, создайте и перейдите к дочернему узлу.
Каждый раз, когда вы найдете |
, создайте и перейдитена одноуровневый узел.
Каждый раз, когда вы найдете }
, переходите к родительскому узлу.
Каждый раз, когда вы найдете слово, поместите это слово в текущий листовой узел.