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

我尝试正则表达式工具(像这样)。

感谢你。

4

1 回答 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+,因为它阻止了最后一个变量赋值。

于 2014-11-09T21:55:35.347 回答