在PHP中的方括号之间捕获文本

我需要一些方法来捕捉方括号内的文本。 所以例如下面的string:

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

可以用来创build以下数组:

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

我有以下正则expression式,/ * [。 /\[.*?\]/但它只捕获第一个实例,所以:

 Array ( [0] => [This] ) 

我怎样才能得到我需要的输出? 请注意,方括号从不嵌套,所以这不是一个问题。

用括号匹配所有string:

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

如果你想要没有括号的string:

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

替代scheme,没有方括号的较慢版本的匹配(使用“*”而不是“[^]”):

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