@mountain123

Как выбрать текст между несколькими квадратными скобками с помощью регулярных выражений?

например есть текст "яблоко [зеленое] яблоко и еще красное"
с помощью регулярного выражения /\[(.+)\]/ вытаскиваю все между квадратными скобками, то бишь слово "зеленое",
Но если текст такой - "яблоко [зеленое] яблоко и [еще] красное", то вытаскивается "зеленое] яблоко и [еще"
какое нужно регулярное выражение чтобы доставались оба и более слов в квадратных скобках?
$subject = "яблоко красное и [зеленое] яблоко и еще [одно] красное яблоко и [еще] одно яблоко, зеленое";
$pattern = '/\[(.+)\]/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
  • Вопрос задан
  • 20710 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
$subject = "яблоко красное и [зеленое] яблоко и еще [одно] красное яблоко и [еще] одно яблоко, зеленое";
$pattern = '/\[(.+?)\]/';
preg_match_all($pattern, substr($subject,3), $matches);
print_r($matches);

Во-первых, вам нужно использовать ленивый квантификатор - добавить знак вопроса после ".+". Таким образом поиск будет производится до первого совпадения, а не до последнего.
Во-вторых, нужно использовать preg_match_all, если вам нужны все совпадения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
abs0lut
@abs0lut
Вот еще вариант:
\[([^\[\]]+)\]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы