我想解析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