Php 如何从m3u字符串中检索变量=“值”对
我有一个m3u文件,其中包含如下行:Php 如何从m3u字符串中检索变量=“值”对,php,regex,preg-match,m3u,Php,Regex,Preg Match,M3u,我有一个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] =
#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_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来简化您的regexp。我还向第二个字符集添加了/以便logo/Viva.png匹配。最后我去掉了\s+,因为它阻止了最后一个变量赋值。您的regexp中只有两个捕获组,您希望它如何捕获8个值?如果要重复匹配,请查看preg_match_all。另外,请注意捕获组从1开始$matches[0]是整个regexp的匹配项。