【发布时间】:2021-03-08 04:28:45
【问题描述】:
所以我需要将 m3u8 字符串解析为数组。但在特定情况下,它被剪得太早了。
这是行:
preg_match_all('/#EXTINF:(.+?)[,]\s?(.+?)[\r\n]+?((?:https?|rtmp):\/\/(?:\S*?\.\S*?)(?:[\s)\[\]{};"\\'<]|\.s$))/', $input_lines, $output_array);
如果 URL 示例是“正常的”,它将正确解析:
#EXTINF:-1 tvg-logo="https://someimage.url/logo.png" group-title="TV",Channel (backup)
https://streaming.url/m3u/channel.m3u8
将解析为:
array(4
0 => array(1
0 => #EXTINF:-1 tvg-logo="https://someimage.url/logo.png" group-title="TV",Channel (backup)
https://streaming.url/m3u/channel.m3u8
)
1 => array(1
0 => -1 tvg-logo="https://someimage.url/logo.png" group-title="TV"
)
2 => array(1
0 => Channel (backup)
)
3 => array(1
0 => https://streaming.url/m3u/channel.m3u8
)
)
但是,如果 URL 中有括号,它将无法完全解析(缺少 .m3u8):
#EXTINF:-1 tvg-logo="https://someimage.url/logo.png" group-title="TV",Channel (backup)
https://streaming.url/m3u/channel(bu).m3u8
将解析为:
array(4
0 => array(1
0 => #EXTINF:-1 tvg-logo="https://someimage.url/logo.png" group-title="TV",Channel (backup)
https://streaming.url/m3u/channel(bu)
)
1 => array(1
0 => -1 tvg-logo="https://someimage.url/logo.png" group-title="TV"
)
2 => array(1
0 => Channel (backup)
)
3 => array(1
0 => https://streaming.url/m3u/channel(bu)
)
)
我该如何解决?
【问题讨论】:
-
我在这里实际上没有看到问题陈述。什么是输入,什么是预期输出?
标签: php parsing preg-match-all m3u8