时间:2021-07-01 10:21:17 帮助过:22人阅读
本文介绍下,用php的正则提取页面中图片地址的方法,有需要的朋友参考下。
在html页面中,图片网址规范的html代码一般为: 囧2和囧4是非必需的,若要通过XHTML认证https://www.gxlcms.com/囧1、囧3、囧5、囧6必不可少。 就正则谈正则的话,最短匹配为: (?<=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=").*?(?=")单纯 (?<=src=").*?(?=") 不行吗? 通常情况,可以,但除了图片地址用src开头以外,javascript地址也用src开头! 把图片的后缀列出来,是否可以呢?例如: 代码示例: (?<=src=").*?\.(jpg|jpeg|gif|png|bmp|JPG|JPEG|GIF|PNG|BMP)你见过没有后缀的图片?jbxue.com 有很多这样的例子 RAW http://us.jbxue.com/content/media/images/Headers/15559182 SmackDown http://us.jbxue.com/content/media/images/Headers/15854138 NXT http://us.jbxue.com/content/media/images/Headers/15929136 Superstars http://us.jbxue.com/content/media/images/Headers/15815850上面的网址都是图片,但都没有传统后缀,遇到这样的地址,还是会束手无策。 此时,可以这样: 有关php正则提取图片地址的建议: 如果图片地址的格式是img空格src=这种形式,请使用:(?<=img.src=").*?(?=") ,数组唯一。 否则,请使用 就介绍这些吧,写的有点乱,不过真的希望可以帮助大家理解php正则的用法。 |