Match den Körper einer Funktion mit Regex

Gegeben eine Dummy-Funktion als solche:

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

Meine Absicht ist es, den Inhalt dieser Funktion zu erhalten. Das Problem besteht darin, verschachtelte Muster von geschweiften Klammern zu finden.{...}.

Ich bin auf @ gestoßrekursive Muster aber ich konnte meinen Kopf nicht um eine Regex legen, die zum Körper der Funktion passt.

Ich habe Folgendes versucht (keine Rekursion):

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

Das Muster stimmt überhaupt nicht überein. Ich bin sicher, es ist das letzte, was falsch ist'{([^{}]*)}/' da dieses Muster funktioniert, wenn es keine anderen Klammern im Körper gibt.

Durch Ersetzen durch:

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

s passte bis zum Abschlu} des Schalters imif Anweisung und dort gestoppt (einschließlich} des Schalters, aber ohne das desif).

Ebenso wie dieses Muster das gleiche Ergebnis:

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage