Corresponder o corpo de uma função usando Regex

Dada uma função fictícia como tal:

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

Minha intenção é obter o conteúdo dessa função, o problema é combinar padrões aninhados de chaves{...}.

Eu me depareipadrões recursivos mas não conseguia entender um regex que correspondesse ao corpo da função.

Eu tentei o seguinte (sem recursão):

$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);

Esse padrão não corresponde a todos. Tenho certeza que é o último bit que está errado'{([^{}]*)}/' pois esse padrão funciona quando não há outros aparelhos no corpo.

Substituindo-o por:

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

Combinou até o fechamento} do interruptor dentro doif declaração e parou por aí (incluindo} do interruptor, mas excluindo o doif)

Além desse padrão, o mesmo resultado:

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

questionAnswers(2)

yourAnswerToTheQuestion