我需要一些方法来捕捉方括号之间的文字。例如,以下字符串:
[This] is a [test] string, [eat] my [shorts].
可用于创建以下数组:
Array (
[0] => [This]
[1] => [test]
[2] => [eat]
[3] => [shorts]
)
我有以下正则表达式,/\[.*?\]/
但它只捕获第一个实例,所以:
Array ( [0] => [This] )
如何获得我需要的输出?请注意,方括号永远不会嵌套,所以这不是问题。
答案 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]);