正则表达式中的排除式写法
m3u8地址各种各样,我们要遍历出内容里面的小文件的下载地址,以前用正则表达式的url规则即可,但是我们会发现,有下面的至少2中类型的地址,怎么取出地址呢?
1 :有这样的:直接包含http的地址
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:2
#EXTINF:5
http://202.102.74.50/6974400842D4881E1904F52F46/0300080700579F4E14D1C42D9B7D2F61E0BD40-0333-38B0-87D6-AF8240D23940.mp4.ts?ts_start=0&ts_end=5&ts_seg_no=0&ts_keyframe=0
#EXTINF:10
http://202.102.74.50/6974400842D4881E1904F52F46/0300080700579F4E14D1C42D9B7D2F61E0BD40-0333-38B0-87D6-AF8240D23940.mp4.ts?ts_start=5&ts_end=15&ts_seg_no=1&ts_keyframe=0
#EXTINF:10
http://202.102.74.50/6974400842D4881E1904F52F46/0300080700579F4E14D1C42D9B7D2F61E0BD40-0333-38B0-87D6-AF8240D23940.mp4.ts?ts_start=15&ts_end=25&ts_seg_no=2&ts_keyframe=0
#EXTINF:10
http://202.102.74.50/6974400842D4881E1904F52F46/0300080700579F4E14D1C42D9B7D2F61E0BD40-0333-38B0-87D6-AF8240D23940.mp4.ts?ts_start=25&ts_end=35&ts_seg_no=3&ts_keyframe=0
#EXTINF:10
http://202.102.74.50/6974400842D4881E1904F52F46/0300080700579F4E14D1C42D9B7D2F61E0BD40-0333-38B0-87D6-AF8240D23940.mp4.ts?ts_start=35&ts_end=45&ts_seg_no=4&ts_keyframe=0
#EXTINF:10
http://202.102.74.50/6974400842D4881E1904F52F46/0300080700579F4E14D1C42D9B7D2F61E0BD40-0333-38B0-87D6-AF8240D23940.mp4.ts?ts_start=45&ts_end=55&ts_seg_no=5&ts_keyframe=0
2 :还有这样的:内容不包含http地址的,需要拼接的
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-DISCONTINUITY
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:17
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.427,
n0011l7h8f0_p202_mp4_av.1.0.ts?ugc=0&ga=0&gv=0&start=0&end=10427
#EXTINF:8.217,
n0011l7h8f0_p202_mp4_av.1.1.ts?ugc=0&ga=0&gv=0&start=10427&end=18644
#EXTINF:10.093,
n0011l7h8f0_p202_mp4_av.1.2.ts?ugc=0&ga=0&gv=0&start=18644&end=28737
#EXTINF:10.344,
n0011l7h8f0_p202_mp4_av.1.3.ts?ugc=0&ga=0&gv=0&start=28737&end=39081
#EXTINF:9.634,
n0011l7h8f0_p202_mp4_av.1.4.ts?ugc=0&ga=0&gv=0&start=39081&end=48715
#EXTINF:12.179,
n0011l7h8f0_p202_mp4_av.1.5.ts?ugc=0&ga=0&gv=0&start=48715&end=60894
所以就不能用匹配url地址的方式进行匹配,否则,第二种无法匹配
[a-zA-z]+://[^s]*
3 :解决方案:
经过一些查询,最后的结论:
[
](/)?[a-zA-z1-9]+[^s]*
解释:
[
]:表示匹配一行的开头
(/)?:表示匹配到但斜杠"/"
[a-zA-z1-9]:表示匹配大小写字母或者数字1-9
+:表示前面的为任意数量
[^s]*:表示任意数量的任意字符串
这样以上的两种方式的m3u8
在线正则表达式测试:http://tool.oschina.net/regex/
参考