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

时间:2012-04-11 10:49:54

标签: php regex string

我需要一些方法来捕捉方括号之间的文字。例如,以下字符串:

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

可用于创建以下数组:

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

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

Array ( [0] => [This] )

如何获得我需要的输出?请注意,方括号永远不会嵌套,所以这不是问题。

1 个答案:

答案 0 :(得分:92)

使用括号匹配所有字符串:

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