PHP Regex, извлеките все пользовательские теги из текста

Проще говоря, мне нужно извлечь все строки, заключенные в фигурные скобки из куска текста, как в

Здесь {tag}, но здесь {tag_2}, а затем снова … {tag_3} … здесь, но с некоторым мусором вокруг него.

Я хотел бы получить массив тегов, tag_2 и tag_3. Теги могут содержать только слова.

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

$tags = array(); preg_match_all("/\{\w+\}/s", $data['text'], $tags); 

Массив тегов возвращается пустым, если выполняется над фрагментом текста.

Редактировать:

Я извиняюсь за все неприятности, оказывается, я испортил позже. Я ловил теги через теги $, вместо $ tags [0], и поэтому мой объединенный массив всегда был пустым.

Solutions Collecting From Web of "PHP Regex, извлеките все пользовательские теги из текста"

Он отлично работает:

 <?php $text = 'Here is a {tag}, but here {tag_2} as well, and then again ...{tag_3}... here but with some trash around it.'; $tags = array(); preg_match_all("/\{\w+\}/s", $text, $tags); print_r($tags); ?> 

производит:

 Array ( [0] => Array ( [0] => {tag} [1] => {tag_2} [2] => {tag_3} ) ) 

Ваши $data['text'] , вероятно, пусты.

Протестировано с помощью Ideone .

Вероятно, если вам не хватает (дополнительного) подчеркивания в вашем регулярном выражении:

 $tags = array(); preg_match_all("/\{[az]+(?:_[1-9][0-9]*)?\}/s", $data['text'], $tags); 

Это не относится к вашему регулярному выражению, так как \w содержит символ подчеркивания. Оставьте вопрос для комментариев ниже.