У меня есть файл 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
Я пытаюсь использовать регулярные выражения (например, этот).
Спасибо.
использование preg_match_all
выполнить несколько матчей:
preg_match_all('/([\w-]+)="([\w-\s.\/]+)"/i',$str,$matches, PREG_SET_ORDER);
Он возвращает результаты в виде 2-мерного массива — одно измерение — это совпадение, другое измерение — это группы захвата внутри совпадений. Чтобы получить их в одном массиве, как в желаемом результате, используйте цикл:
$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+
в конце, потому что это препятствовало тому, чтобы последнее назначение переменной работало.
Других решений пока нет …