当前位置:Gxlcms > PHP教程 > php正则提取图片地址_PHP教程

php正则提取图片地址_PHP教程

时间:2021-07-01 10:21:17 帮助过:4人阅读

最近在开发程序的时候需要获取提取内容中的图片地址,这里简单分享下方法,需要的朋友可以参考下

迷上了正则,不断尝试着新花招,首先感谢TNA 的非完全输出RSS,然后再次感谢SH的强迫性学习。没有TNA,我不会去看正则,更不知道世界上有种这么牛的表达式;不是SH的死活说他不懂不知道,我也不会硬着头皮去琢磨,去改进。达到同一个目的,正则的表达方式可以不唯一,没有做不到,只有你没想到。可以这样说吧,正则就是玩设定规律,我大爱这种东西。没有比设定规律筛选东西更让我兴奋、感到awesome的了。 分享一下在php环境下使用正则提取图片地址的一些小心得: 图片网址规范的html代码无非就是 代码如下: 囧4 囧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 上面的网址都是图片,但都没有传统后缀,你老实也没用,还是不能获取到它们。 怎么办呢?还可以这样 代码如下: www.bkjia.comtruehttp://www.bkjia.com/PHPjc/747076.htmlTechArticle最近在开发程序的时候需要获取提取内容中的图片地址,这里简单分享下方法,需要的朋友可以参考下 迷上了正则,不断尝试着新花招,首...

人气教程排行