Захват текста между квадратными скобками в PHP

Мне нужен способ захвата текста между квадратными скобками. Так, например, следующая строка:

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

Может использоваться для создания следующего массива:

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

У меня есть следующее regex, /\[.*? /\[.*?\]/ но оно захватывает только первый экземпляр, так что:

 Array ( [0] => [This] ) 

Как я могу получить результат, который мне нужен? Обратите внимание, что квадратные скобки НИКОГДА не вложены, так что это не проблема.

Соответствует всем строкам с помощью скобок:

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

Если вам нужны строки без скобок:

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

Альтернативная, более медленная версия соответствия без скобок (используя «*» вместо «[^]»):

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