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

2022-08-30 11:37:24

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

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

可用于创建以下数组:

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

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

Array ( [0] => [This] )

如何获得所需的输出?请注意,方括号从不嵌套,因此这不是问题。


答案 1

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

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

答案 2

推荐