Подтвердить что ты не робот

Захват текста между квадратными скобками в PHP

Мне нужен способ захвата текста между квадратными скобками. Например, следующая строка:

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

Может использоваться для создания следующего массива:

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

У меня есть следующее regex, /\[.*?\]/, но оно только захватывает первый экземпляр, поэтому:

Array ( [0] => [This] )

Как я могу получить вывод, который мне нужен? Обратите внимание, что квадратные скобки НИКОГДА не вложены, так что это не проблема.

4b9b3361

Ответ 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]);