Text in eckigen Klammern in PHP erfassen

Ich brauche eine Möglichkeit, den Text zwischen eckigen Klammern zu erfassen. Also zum Beispiel die folgende Zeichenfolge:

[This] is a [test] string, [eat] my [shorts].

Kann zum Erstellen des folgenden Arrays verwendet werden:

 Array ( [0] => [This] [1] => [test] [2] => [eat] [3] => [shorts] ) 

Ich habe die folgende Regex, /\[.*?\]/ aber es erfasst nur die erste Instanz, also:

 Array ( [0] => [This] ) 

Wie kann ich die Ausgabe erhalten, die ich brauche? Beachten Sie, dass die eckigen Klammern NIE verschachtelt sind, das ist also kein Problem.

Entspricht allen Zeichenfolgen mit Klammern:

 $text = '[This] is a [test] string, [eat] my [shorts].'; preg_match_all("/\[[^\]]*\]/", $text, $matches); var_dump($matches[0]); 

Wenn Sie Zeichenfolgen ohne Klammern möchten:

 $text = '[This] is a [test] string, [eat] my [shorts].'; preg_match_all("/\[([^\]]*)\]/", $text, $matches); var_dump($matches[1]); 

Alternative, langsamere Version des Abgleichs ohne Klammern (mit “*” anstelle von “[^]”):

 $text = '[This] is a [test] string, [eat] my [shorts].'; preg_match_all("/\[(.*?)\]/", $text, $matches); var_dump($matches[1]);