Müssten nicht die ersten beiden Fragezeichen bei 3) hinter die Klammern?
Nein, denn nur das Komma, bzw. das Semikolon soll optional sein. Das Komma wird nur bei mehrere Parametern des selben Typs gebraucht, das Semikolon trennt mehrere Parameter (wird beim letzten also nicht gebraucht).
Sehr spannend, aber ich habe auch noch keine Idee.
Wenn man den (begin|var|...)-Teil weglässt, funktioniert der Regex übrigens und findet die Deklarationen.