Я хочу разобрать файл HLS master m3u8 и получить от него ширину полосы пропускания, разрешение и имя файла. В настоящее время я использую синтаксический анализ строк для поиска строки для некоторых шаблонов и для получения значения используется вспомогательная строка.Parsing HLS m3u8 файл с использованием регулярных выражений
Пример файла:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
Stream1/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=763319,RESOLUTION=480x270
Stream2/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1050224,RESOLUTION=640x360
Stream3/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1910937,RESOLUTION=640x360
Stream4/index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3775816,RESOLUTION=1280x720
Stream5/index.m3u8
Но я обнаружил, что мы можем разобрать его с помощью регулярных выражений, как упомянуто в этом вопросе: Problem matching regex pattern in Android
я не имею ни малейшего представления регулярного выражения так может некоторые один из них поможет мне разобрать это, используя регулярное выражение.
Или кто-то может помочь мне в написании регулярного выражения для разбора из BANDWIDTH и разрешения значения из ниже строк
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
Спасибо за ответ будет попробовать ваш код. У меня есть вопросы о совпадении шаблонов, когда мы называем 'pattern.matcher', что именно он возвращает в' matcher', является ли строка, опуская данный паттен в регулярном выражении? после выполнения 'pattern.matcher', почему мы вызываем' find'? – User7723337
Матчи - это объект, который вы используете для выполнения соответствующих операций над данной строкой на основе шаблона. Когда вы вызываете 'find()', он попытается найти следующее совпадение в данной строке, если оно найдет одно, оно вернет true, и мы можем извлечь результат. Вы можете посмотреть [документацию] (http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html) для получения дополнительной информации (то есть документации Java, но он должен вести себя одинаково на Android, в андроид-доке не было много деталей). – rvalvik
спасибо за объяснение! Я связал ваш код, он работает, но в случае, если строка не имеет РЕШЕНИЯ в ней и просто пропускная способность, то? Я попробовал, но «найти» в этом случае не работает. можно ли проверить RESOLUTION в любом случае, если он был найден, тогда все остальное просто игнорируется или нам нужно иметь отдельные выражения для анализа ширины полосы пропускания и разрешения и передавать одну и ту же строку в оба из них и вызвать find? – User7723337