Мне нужен способ захвата текста между квадратными скобками. Так, например, следующая строка:
[This] is a [test] string, [eat] my [shorts].
Может использоваться для создания следующего массива:
Array ( [0] => [This] [1] => [test] [2] => [eat] [3] => [shorts] )
У меня есть следующее regex, /\[.*? /\[.*?\]/
но оно захватывает только первый экземпляр, так что:
Array ( [0] => [This] )
Как я могу получить результат, который мне нужен? Обратите внимание, что квадратные скобки НИКОГДА не вложены, так что это не проблема.
Соответствует всем строкам с помощью скобок:
$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]);