2010-11
26

再谈php正则提取图片地址

By xrspook @ 21:46:54 归类于: 烂日记

前天写了小谈php正则提取图片地址,但其实,提取src=里面的图片地址还不足够,因为不能保证那个地址一定是绝对地址,完全的地址,如果那是相对的呢?如果地址诸如:

albums/Candids/thumb_P1050338.jpg
/content/media/touts/5271608/5271654/15320982

那该如何是好?

有时在这些地址前面需要加http://example1.com/,有些甚至要加http://example1.com/example2/…/于是,要写出出一种法则符合所有要求,简直是天方夜谭。只能见机行事对症下药。有时,需要从前面动刀,有时需要从后面砍断。

今天,我惊讶地知道了一个道理,原来http://example.com/http://example.com//////是一样的!

http://img3.douban.com/pics/nav/lg_main_a6.png

http://img3.douban.com////pics////nav///lg_main_a6.png

最终你都能到达

于是,对于一开始提到的两个相对地址如果要强行加入某前缀恢复成绝对地址的话,也不管前面有没有“/”,只管加一个“/”就好,“有杀错,没放过”嘛,多一个显示仍会正常,但少一个“/”,嘿嘿,你就别想成功了。开始的时候我还没意识到这种东西,复制了一大段代码,把一样的东西硬生生弄两份,一份加“./.”,一份不加。我这个火星来的,浪费时间了。

放出2个地址,公测一下网页获取图片的情况:

针对任何网页,需要登入的除外:http://xyark.serw5.com/img.php
针对Coppermine Photo Gallery系统:http://xyark.serw5.com/g.php(如果你认为弹出原图的js页面也需要的话,我只好囧你了)

普页是个对抓取任何图片的尝试,系统专页是为了展示什么叫做具体情况具体分析。试过的童鞋会知道,普页对某些使用Coppermine Photo Gallery系统的网站是行不通的,原因何在?就是那个前缀搞的鬼!但系统专页就能很好地避开了这个问题。

如果大家在测试时发现任何bug,欢迎留言告知。请低调测试,谢谢合作。

注:以上话题纯粹出于就正则谈正则,光技术谈技术,不可作非正当用途。若非正当使用而引发任何杯具、餐具本人概不负责。

2010-11
25

见鬼去吧

By xrspook @ 23:25:20 归类于: 烂日记

今天心情很不好,因为明明只剩下一个分卷的rar了,昨天晚上还可以,今天早上4个网盘里的都不行了。于是,1.8GB的文件,我已经完成了1.4G+,剩下最后一个400MB,却无能为力。以为自己很聪明地从另外一个也是400MB分组的rar下缺的那个下来,能“接上”,但徒劳。这已经是第二次了,第一次是下了一个900MB+的上卷,但也是当天晚上觉得网速太慢,没有坚持,于是第二天早上下卷就都被delete了,没有比这更郁闷的了。2010的Survivor Series PPV把我弄得超级惨。还有机会,就是网友上传的MU,但东莞电信开不了MU,这我可是试过N多次的,开着代理可以上MU,但用代理根本下不了,首先说你的IP占着,其次,一个文件900M+啊,中途断线就惨哉了。

今天是库里某个企业应急加工厂的奠基仪式,领导叫全部人穿工服出席,我却生气地躲在检验室做整精米率。

下午,本打算继续完成3个整精米率,但却听到了在进稻谷期间,周末检化验必须留人的消息。见鬼去吧!检化验也就两个人,不是他就是我。更重点的是,稻谷每天就1-2车,每车约50吨,要进7500吨,这要多久啊!三个月以上!!!!简单来说就是半个月放2天假,这不是神经病是什么!!!!代储的粮食,粮食主人都不紧张,你紧张个鸟!把什么责任都揽在身上,这很英雄?!狗熊一个。让一大帮人为了某些人的面子通通送死。一大帮人是谁?运粮过来的司机、检验的、扦样的保管员、负责流程机械的一组起码6个人,所有人,周末就耗在那区区1-2车稻谷上。今天下午还跟我吹,某某库试过某天30台车排在门口乖乖地等,TD,如果这里也有30台车,我也心甘情愿了,30*50=1500(吨)这般算法的话5天就能把7500完成,一鼓作气就好,但现在,根本在打非把你耗死不可的持久战。

脑袋用来干什么的,如果不思考的话?难道就是为了喝酒的时候有“上头”的感觉。

明天又是沾亚运光赏来的放假,晚上5点多告诉我没车回广州,要我跟主任8点才能进城的车,气愤之下,爽快地推了,难道我不会自己搭车走人?!花了接近3小时从单位回到家,其实也跟平时星期五非单双号时回家耗时差不多,也懒得听你们的指指点点。

我只是个nobody,我拒绝做伟事!

2010-11
24

小谈php正则提取图片地址

By xrspook @ 22:34:32 归类于: 烂日记

迷上了正则,不断尝试着新花招,首先感谢TNA的非完全输出RSS,然后再次感谢SH的强迫性学习。没有TNA,我不会去看正则,更不知道世界上有种这么牛的表达式;不是SH的死活说他不懂不知道,我也不会硬着头皮去琢磨,去改进。达到同一个目的,正则的表达方式可以不唯一,没有做不到,只有你没想到。可以这样说吧,正则就是玩设定规律,我大爱这种东西。没有比设定规律筛选东西更让我兴奋、感到awesome的了。

分享一下在php环境下使用正则提取图片地址的一些小心得:

图片网址规范的html代码无非就是

<img style="囧1" title="囧2" src="囧3" alt="囧4" width="囧5" height="囧6" />

囧1和囧2是非必需的,若要通过XHTML认证囧4、囧5、囧6必不可少,囧3是核心内容,当然就不能少了。

就正则谈正则的话,我写出的最短匹配是

(?<=img.+?src=”).*?(?=”)

不过,这条在php里不行,会出现:

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset *** in ***

纠结了很久,都不行,原因何在呢?试了很多次,终于发现问题在(?<=img.+?src=”)这个零宽断言里,在php中,零宽断言里不支持类似“*”、“+”这些无限次的东西,于是报错了,把“.+?”改为定长就好。不过,要“img”和“src=”之间定长基本上是不可能的。通常,图片地址的img和src只会相隔一个很简单的空格,但不排除某些情况在src之前,img后有alt、titlte等东西。

所以

(?<=img.src=”).*?(?=”)

(?<=img\ssrc=”).*?(?=”)

可能可以,但不保证100%没问题。

你也许会问,单纯

(?<=src=”).*?(?=”)

不行吗?通常情况,可以,但,搜索过页面的盆友应该知道,除了图片地址用src开头以外,javascript地址也用src开头!而且,太多神通广大的不可预知因素隐含其中,于是这个貌似很简短完美的写法就行不通了。

你又或许会问,聪明简短的不行,我把图片的后缀列出来,总该可以了吧,如

(?<=src=”).*?\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)

的确,这个写法实在是很老实,不过,你见过没有后缀的图片?wwe.com有很多这种例子呢

RAW http://us.wwe.com/content/media/images/Headers/15559182
SmackDown http://us.wwe.com/content/media/images/Headers/15854138
NXT http://us.wwe.com/content/media/images/Headers/15929136
Superstars http://us.wwe.com/content/media/images/Headers/15815850

上面的网址都是图片,但都没有传统后缀,你老实也没用,还是不能获取到它们。

怎么办呢?还可以这样

<img(.*?)src=”(.*?)(?=”)

和上面的表达式不同,这次的结果中array[0]的内容不是我们想要的,我们要的图片地址在array[2]里。为什么呢?因为我们用了2个(.*?),每个“()”的东西会自动存在一个组里,而array[0]代表结果的汇总,array[1]包含了img和src里的所有东西,array[2]才轮到我们想要的图片地址。这种匹配方法,既能匹配有传统后缀的图片,也能匹配一些无后缀的图片文件,同时又不会杀错其它src=文件。个人感觉还是不错的,呵呵。当然了,如果你还有更好的建议,请马上留言,全球人民都会感谢你!

你到底要什么样的图片,是固定格式还是其它?得具体情况具体分析呢。

我的建议是:

如果你要的图片地址的格式是img空格src=的,请使用:(?<=img.src=”).*?(?=”),数组唯一,你懂的。

否则,请使用<img(.*?)src=”(.*?)(?=”),记得留意有用内容所在的数组位置哦!

2010-11
23

重过手套生活

By xrspook @ 21:28:34 归类于: 烂日记

我的幸福生活没有持续24小时,下水才约20小时,一次砻谷机卡机,一次打开机盖,左手食指又被划到了,那时还不知道,直到莫名其妙地看到白色实验桌上星星点点的血印……直接冲去洗手间,因为当时两手脏死了,那一刻很纠结,到底是先洗伤口呢还是先洗手的其它部分? 最后还是先洗其它部分再冲伤口,接着直接向办公室的碘伏和创口贴冲去。其实呢,血很快就止住了,冲水过后已经没流,之前为什么会弄得桌子星星点点是因为当时完全没有意识到,正专心致志地折腾那该死的机器,手指乱摸。

我应该感到庆幸,因为其实左手的食指和中指也在那个开盖操作时划破了,不过不深,不到流血的状态而已,否则,哼哼哼,我可真好玩了。

剪下一个一次性手套的指头,再剪下一个乳胶手套的指头,因为我的正经事还没完呢。

就这样,我才偷乐了20小时,又不得不过上手套生活。

在大路上摔的一跤,1秒都不到,却花费了接近200块的钱财和18天时间,才算勉强摆平。今天又是一次秒杀。我可以handle隐隐作痛,但为什么要去handle呢?!不曾遇到那该多好。

食指废掉,键盘的一片地方都变得不方便,就此打住吧。

2010-11
22

下水

By xrspook @ 21:16:44 归类于: 烂日记

第18日的晚上,老天爷安排我自己把痂给撕掉了,第19日的早上,老天爷安排我忘带胶手套,于是第19日的晚上,我要不再找一双手套,要不结束18日来的无水境界。于是,在今晚8点多的时候,双手下水了。也不知道是真是假,在一开始的时候,感觉那片位置特别敏感,有种异样的感,但随着洗衣服、洗头和洗澡的程序推进,一切都变得那么的自然。开始是贴着创口贴的,但热水十几分钟的接触后,创口贴粘不稳了,也只好直接撕掉,感觉如何?没啥特殊的感觉。湿润后的那片位置比干的时候还舒服,干的时候还会有偶尔扯痛,但湿了以后,感觉好极了!湿了以后,也能看出一个现象,其实那两片位置掉的不是一层皮,而是不规则的掉了一些,就像那些无良施工队修完什么电缆水管没有重新把路面铺好的状态。

好不容易才拍了几张。

别埋怨我,因为我是个变态的人,所以才拍了以下三组。

双手的“痊愈照”。痂揭掉就这个状态了,算是挺完美的痊愈,你觉得这个状态下,我还会感觉到痛吗?

痂的对光照,没想明白,为什么会透光的,而且是那么的不均匀。右手的伤口上有粒我开始清创时没有弄掉的小沙,幸好那东西最终没有留在我的手上而是转移到痂里去了。

试了很多次,都没办法不用闪光灯把痂给照清楚,于是又试了好几个角度的闪光灯效果,还好,总算大致把实物还原出来。如果用体视显微镜看的话,应该会很精彩。

变态的我仍把那痂给留住,等某个机会继续照……

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress