Извлечение тегов из строки с помощью регулярных выражений

Я застрял. Не то, чтобы я был профессионалом в регулярных выражениях, скорее наоборот. Но мне не удается решить, казалось бы, очевидную задачу.

Исходная строка:

tag:tag1; tag:tag2;tag:tag3; tag:tag4

Мне нужно извлечь теги, т. Е. Все, что находится между «tag:» и следующей точкой с запятой (или концом строки для последнего тега). Лучшее, что я мог получить до сих пор, это

{tag:(?P<tag>[^;]+)(;|$)}i

То есть начать с «tag:», затем разрешить любые символы, кроме точки с запятой, а затем завершить точкой с запятой или концом строки. И делать сопоставление без учета регистра. Но с обоими preg_match а также preg_match_allЯ получаю только первый тег с этим регулярным выражением 🙁

Альтернативный (но без циклов) метод для достижения того, что я хочу — массив строк тегов — с помощью PHP также имеет значение.

0

Решение

Работает нормально здесь:

$text = 'tag:tag1; tag:tag2;tag:tag3; tag:tag4';
preg_match_all('{tag:(?P<tag>[^;]+)(;|$)}i', $text, $matches);
print_r($matches['tag']);

Выходы:

Array
(
[0] => tag1
[1] => tag2
[2] => tag3
[3] => tag4
)
1

Другие решения

Использование str_replace () + explode (), как предложил Jelle Keizer.

   <?php
$text = 'tag:tag1; tag:tag2;tag:tag3; tag:tag4';

$text = str_replace(array('tag:', ' '),array('', ''), $text);
$array = explode(';', $text);

var_dump($array);

Выходы:

Array
(
[0] => tag1
[1] => tag2
[2] => tag3
[3] => tag4
)
1

По вопросам рекламы [email protected]