一尘不染

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

php

我需要某种方式来捕获方括号之间的文本。因此,例如,以下字符串:

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

可用于创建以下数组:

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

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

Array ( [0] => [This] )

如何获得所需的输出?请注意,方括号从不嵌套,因此不必担心。


阅读 189

收藏
2020-05-26

共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]);
2020-05-26