【问题标题】:PHP Preg match all m3u8 to parse into arrayPHP Preg 匹配所有 m3u8 以解析成数组
【发布时间】: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


【解决方案1】:

使用这种模式:

$re = '/#EXTINF:(.+?)[,]\s?(.+?)[\r\n]+?((?:https?|rtmp):\/\/(?:\S*?\.\S*?)(?:[\s\[\]{};"\\\\\'<]|\.s$))/';

或在线查看解决方案:Regex101.com...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多