Сопоставить тело функции с помощью Regex

Дана фиктивная функция как таковая:

public function handle()
{
  if (isset($input['data']) {
    switch($data) {
      ...
    }
  } else {
    switch($data) {
      ...
    }
  }
}

Мое намерение состоит в том, чтобы получить содержимое этой функции, проблема заключается в сопоставлении вложенных шаблонов фигурных скобок{...}.

Я сталкивалсярекурсивные паттерны но я не мог разобраться с регулярным выражением, которое соответствовало бы телу функции.

Я пробовал следующее (без рекурсии):

$pattern = "/function\shandle\([a-zA-Z0-9_\$\s,]+\)?". // match "function handle(...)"
            '[\n\s]?[\t\s]*'. // regardless of the indentation preceding the {
            '{([^{}]*)}/'; // find everything within braces.

preg_match($pattern, $contents, $match);

Этот шаблон не соответствует вообще. Я уверен, что это последний бит, который не так'{([^{}]*)}/' поскольку этот шаблон работает, когда в теле нет других фигурных скобок.

Заменив его на:

'{([^}]*)}/';

Это соответствует до закрытия} переключателя внутриif Заявление и остановился там (в том числе} выключателя, но исключая тот изif).

Как и этот шаблон, тот же результат:

'{(\K[^}]*(?=)})/m';

Ответы на вопрос(2)

Ваш ответ на вопрос