正则表达式中的排除式写法

正则表达式中的排除式写法

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 :解决方案:

经过一些查询,最后的结论:

[\n](/)?[a-zA-z1-9]+[^\s]*

解释:

[\n]:表示匹配一行的开头
(/)?:表示匹配到但斜杠"/"
[a-zA-z1-9]:表示匹配大小写字母或者数字1-9
+:表示前面的为任意数量
[^\s]*:表示任意数量的任意字符串

这样以上的两种方式的m3u8

在线正则表达式测试:http://tool.oschina.net/regex/

参考

正则表达式30分钟入门教程

正则表达式中的不匹配

不包含字符串abc的正则表达式

posted @ 2016-08-04 14:48  Darren.Von  阅读(8449)  评论(1编辑  收藏  举报
新浪微博:IT_攻城师,github:darren90(欢迎★star点赞)