#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