Une el cuerpo de una función usando Regex

Dada una función ficticia como tal:

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

Mi intención es obtener el contenido de esa función, el problema es hacer coincidir patrones anidados de llaves{...}.

Me he encontradopatrones recursivos pero no podía entender una expresión regular que coincidiera con el cuerpo de la función.

He intentado lo siguiente (sin recurrencia):

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

Ese patrón no coincide en absoluto. Estoy seguro de que es lo último que está mal'{([^{}]*)}/' ya que ese patrón funciona cuando no hay otros aparatos dentro del cuerpo.

Al reemplazarlo con:

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

Coincidió hasta el cierre} del interruptor dentro delif declaración y se detuvo allí (incluyendo} del interruptor pero excluyendo el delif)

Además de este patrón, el mismo resultado:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta