Проще говоря, мне нужно извлечь все строки, заключенные в фигурные скобки из куска текста, как в
Здесь {tag}, но здесь {tag_2}, а затем снова … {tag_3} … здесь, но с некоторым мусором вокруг него.
Я хотел бы получить массив тегов, tag_2 и tag_3. Теги могут содержать только слова.
Я попробовал это:
$tags = array(); preg_match_all("/\{\w+\}/s", $data['text'], $tags);
Массив тегов возвращается пустым, если выполняется над фрагментом текста.
Редактировать:
Я извиняюсь за все неприятности, оказывается, я испортил позже. Я ловил теги через теги $, вместо $ tags [0], и поэтому мой объединенный массив всегда был пустым.
Он отлично работает:
<?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
содержит символ подчеркивания. Оставьте вопрос для комментариев ниже.