Получить все качества видео из блока текста с помощью регулярного выражения

#php #preg-match #preg-match-all

#php #preg-match #preg-match-all

Вопрос:

Я хочу получить все качества видео из строки. Моя строка:

 #EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000
128/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000
500/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000
750/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1250000
1000/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1750000
1500/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2750000
2500/prog_index.m3u8?key=49bfee85b05d117a2906368428094e94
  

И мой PHP-код:

 preg_match_all("/(.*?)/prog_index.m3u8/mis", $serviceurlget, $C);
print_r($C);
  

ВОЗВРАТ:

 Array
(
    [0] => Array
        (
            [0] => #EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000
128/prog_index.m3u8
            [1] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000
500/prog_index.m3u8
            [2] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000
750/prog_index.m3u8
            [3] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1250000
1000/prog_index.m3u8
            [4] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1750000
1500/prog_index.m3u8
            [5] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2750000
2500/prog_index.m3u8
        )

    [1] => Array
        (
            [0] => #EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000
128
            [1] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=750000
500
            [2] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000
750
            [3] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1250000
1000
            [4] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1750000
1500
            [5] => ?key=49bfee85b05d117a2906368428094e94
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2750000
2500
        )

)
  

Но я не хочу этого результата. Я хочу, чтобы оно вернулось 128 500 750 1000 1500 2500 . Как я могу это сделать? Я попробовал explode() функцию. Но это не сработало. Я думаю, что в моем коде регулярных выражений есть ошибка.

Ответ №1:

Удалите модификаторы m and s из preg_match_all() инструкции. Эти модификаторы влияют на то, как шаблон соответствует строке темы, и не всегда требуются:

  • m модификатор изменяет значение привязок строк ( ^ и $ ) с «совпадение в начале / конце строки» на «совпадение в начале / конце каждой строки«. Если в строке темы нет символов новой строки или нет вхождений привязок строк в шаблоне регулярных выражений, этот модификатор бесполезен.

  • s модификатор изменяет значение метасимвола точки ( . ) с «сопоставлять все, кроме символов новой строки» на «сопоставлять все, включая символы новой строки». Это позволяет обрабатывать всю строку как одну строку.

Для получения дополнительной информации см. Документацию руководства по PHP о модификаторах шаблонов.


Ваш код должен быть:

 preg_match_all("/(.*?)/prog_index.m3u8/i", $serviceurlget, $C);
print_r($C[1]);
  

Вывод:

 Array
(
    [0] => 128
    [1] => 500
    [2] => 750
    [3] => 1000
    [4] => 1500
    [5] => 2500
)
  

ДЕМОНСТРАЦИЯ

Комментарии:

1. Ответ с идеальным количеством деталей и красиво отформатирован. 🙂 1