我想解析HLS主m3u8文件并从中获取带宽,分辨率和文件名。目前我使用字符串解析来搜索字符串的一些模式,并做子字符串来获取价值。使用正则表达式解析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
我没有正则表达式的任何想法,所以会有些一个请指导我使用正则表达式来解析此问题。
或者有人可以帮我写的正则表达式从以下字符串
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=476416,RESOLUTION=416x234
感谢您的答复将尝试您的代码。当我们调用'pattern.matcher'时,我有一个关于模式匹配的问题,它在'matcher'中返回的是它在正则表达式中忽略给定的模式的字符串?在做'pattern.matcher'之后,我们为什么要调用'find'? – User7723337 2013-03-07 08:58:45
匹配器是您用来根据模式对给定字符串执行匹配操作的对象。当你调用find()时,它会尝试找到给定字符串中的下一个匹配项,如果它找到一个它返回true,我们可以提取结果。您可以查看[文档](http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html)以获取更多信息(这是Java文档,但是它应该在Android上表现相同的方式,android文档没有太多细节)。 – rvalvik 2013-03-07 09:13:49
感谢您的解释!我把你的代码绑定在工作,但如果字符串没有解决方案,只是带宽呢?我尝试过,但'find'在这种情况下失败了。是否有可能检查解决方案在任何情况下,如果发现然后确定否则只是忽略或我们需要拖放单独的表达式来解析带宽和分辨率,并将相同的字符串传递给它们并调用find? – User7723337 2013-03-07 09:34:44