Получить строки внутри двойных скобок [дубликаты]

0

У меня есть строка, где некоторая часть строки находится внутри фигурных скобок, и я хотел бы получить их в массиве.

Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit. является, например: Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit.

И я хотел бы получить: array("ipsum", "consectetur")

Я попробовал это:

$regExp = "/\{\{([^)]+)\}\}/";
$result = preg_grep($regExp, array("Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit."));

но я возвращаю заданную строку как результат

Теги:
preg-grep

2 ответа

2
Лучший ответ

Вы используете неправильную функцию, вы должны использовать preg_match_all().

Вы также должны использовать ленивый, а не жадный совпадение, чтобы избежать результата ipsum}} dolor sit amet, {{consectetur. Вы можете сделать это, добавив ? после вашего квантификатора:

$regExp = "/\{\{([^)]+?)\}\}/";
                      ^ here
preg_match_all($regExp, "Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit.",
               $result);

var_dump($result);

Рабочий пример.

  • 0
    Это очень похоже на моё решение ... Просто вопрос: зачем вам нужна [^)] часть? Почему вы хотите исключить закрывающую скобку?
  • 0
    @TiborB. На самом деле, вам это не нужно. В этом случае .+? будет делать так же хорошо, как [^)]+? , Тем не менее, я предполагаю, что ОП использует его по какой-то причине, поэтому я скопировал его выражение, чтобы не нарушать другие вещи, которые мы здесь не видим.
Показать ещё 1 комментарий
1

Используйте preg_match_all() вместо preg_grep

$str = 'Lorem {{ipsum}} dolor sit amet, {{consectetur}} adipiscing elit';
preg_match_all('!\{(\w+)\}!', $str, $m);
$result = array_map(function($v){return trim($v, '{}');},$m[0]);

print '<pre>';
print_r($result);
print '</pre>';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню