Захват текста в квадратных скобках в PHP

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

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

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

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

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

<code>Array ( [0] => [This] )
</code>

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

Ответы на вопрос(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]);
 11 апр. 2012 г., 13:20
Теперь вы можете показать: print_r ($ match [1]); что только вы получите те, что в скобках.
 25 авг. 2014 г., 18:57
было бы лучше, если бы ваш кодpreg_match_all("/\[([^\]]*)\]/", $text, $matches);
 11 апр. 2012 г., 12:55
И если вам нужны строки в скобках: preg_match_all (& quot; / [(. *?)] / & Quot; $ text, $ соответствия);
 Chuck Le Butt11 апр. 2012 г., 13:17
@GertVandeVen Странно, теперь я получаю следующее:Array ( [0] => Array ( [0] => [This] [1] => [test] [2] => [eat] [3] => [shorts] ) [1] => Array ( [0] => This [1] => test [2] => eat [3] => shorts ) )
 11 апр. 2012 г., 12:57
@GertVandeVen: Требуется обратная косая черта. preg_match_all (& Quot; / \ [(*) \.?] / & Quot;, $ текст, $ соответствует). Вероятно, веб удалил Ваш;)

Ваш ответ на вопрос