PHP Regexp для получения переменной = «значение» из строки

0

У меня есть файл m3u, который содержит строки, например:

#EXTINF:0 $ExtFilter="Viva" group-title="Variedades" tvg-logo="logo/Viva.png" tvg-name="Viva"

Я запускаю это на PHP без успеха:

preg_match('/([a-z0-9\-_]+)=\"([a-z0-9\-_\s.]+)\"\s+/i',$str,$matches)

Я хочу получить:

$matches[0] = $ExtFilter
$matches[1] = Viva
$matches[2] = group-title
$matches[3] = Variedades
$matches[4] = tvg-logo
$matches[5] = logo/Viva.png
$matches[6] = tvg-name
$matches[7] = Viva

Я пытаюсь использовать инструменты regexp (например, это).

Спасибо.

Теги:
preg-match
m3u

1 ответ

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

Используйте preg_match_all для выполнения нескольких совпадений:

preg_match_all('/([\w-]+)="([\w-\s.\/]+)"/i',$str,$matches, PREG_SET_ORDER);

Он возвращает результаты в виде двумерного массива - одно измерение - это совпадение, другое измерение - группы захвата в матчах. Чтобы получить их в один массив, как в вашем желаемом результате, используйте цикл:

$results = array();
foreach ($matches as $match) {
    array_push($results, $match[1], $match[2]);
}
print_r($results);

Печать:

Array
(
    [0] => ExtFilter
    [1] => Viva
    [2] => group-title
    [3] => Variedades
    [4] => tvg-logo
    [5] => logo/Viva.png
    [6] => tvg-name
    [7] => Viva
)

Я упростил ваше регулярное выражение, используя \w вместо a-z0-9_. Я также добавил / во второй набор символов, чтобы logo/Viva.png соответствовал. Я избавился от \s+ в конце, потому что это предотвратило работу последнего назначения переменной.

Ещё вопросы

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