下面我来给大家介绍在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.compicsnav///lg_main_a6.png

最终你都能到达

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

1

??和??是非必需的,若要通过XHTML认证??、??、??、??必不可少。

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

1 (?<=img. ?src=").*?(?=")

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

1 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等东西。

所以

1 (?<=img.src=").*?(?=")

1 (?<=imgssrc=").*?(?=")

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

你也许会问,单纯

1 (?<=src=").*?(?=")

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

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

1 (?<=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

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

怎么办呢?还可以这样

1

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

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

我的建议是:

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

否则,请使用

并在项目中使用了很长时间的正则吧.

/"'s]*)/i

,我使用kindeditor保存文章,但是需要取出第N个图片的地址作为文章的标志图片,文章代码(内容的html)保存到数据库一个字段,然后图片地址保存到另外一个字段.我就是使用上面的正则解决的.

我说明下,上面的地址是直接获取img标签内src属性的值.在使用该正则的php页面访问该路径如果能找到图片的话,可以直接使用,如果不能,你可以使用preg_match_all将所有地址先保存到数组,然后处理路径,比如获取文件名称(不含路径部分),然后重新组成url,再删除图片.

我的例子:

preg_match_all("/"'s]*)/i",str_ireplace("\","",$content),$arr);

呵呵 我的内容部分被php给加上转义了,所以我需要先把去除,str_ireplace("\","",$content),然后将匹配的内容保存到$arr数组(二维的).

$arr[1]就是存储该路径的数组.

php 匹配图片路径_php正则匹配图片路径原理与方法相关推荐

  1. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签...

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 ...

  2. web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 需要导入模块:from scrapy.selector import HtmlXP ...

  3. 4、web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 需要导入模块:from scrapy.selector import HtmlXP ...

  4. 四 web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 需要导入模块:from scrapy.selector import HtmlXP ...

  5. php正则匹配斜线_PHP正则匹配反斜杠'\'和美元'$'的方法

    本文实例讲述了PHP正则匹配反斜杠'\'和美元'$'的方法.分享给大家供大家参考,具体如下: 1. test.php: $content = '1111111 22222223$'; //'\\\\\ ...

  6. php正则匹配斜线_PHP正则匹配反斜杠和美元$的方法

    本文实例讲述了PHP正则匹配反斜杠""和美元"$"的方法.分享给大家供大家参考,具体如下: 1. test.php:<?php $content = &q ...

  7. php 正则匹配字母和数字,正则匹配密码只能是数字和字母组合字符串功能【php与js实现】...

    搜索热词 @H_301_0@本文实例讲述了正则匹配密码只能是数字和字母组合字符串功能.分享给大家供大家参考,具体如下: @H_301_0@密码要求: @H_301_0@1. 不能全部是数字 2. 不能 ...

  8. js正则匹配闭合标签_正则匹配闭合HTML标签(支持嵌套)

    OK,先确定我们要解决的问题--从一段Html文本中找出特定id的标签的innerHTML. 这里面最大的难点就是,Html标签是支持嵌套的,怎么能够找到指定标签相对应的闭合标签呢? 我们可以这样想, ...

  9. 正则匹配承兑的html,正则匹配闭合HTML标签(支持嵌套)

    原标题:正则匹配闭合HTML标签(支持嵌套) 任何复杂的正则表达式都是由简单的子表达式组成的,要想写出复杂的正则来,一方面需要有化繁为简的功底,另外一方面,我们需要从正则引擎的角度去思考问题.关于正则 ...

最新文章

  1. iOS-APP提交上架流程(新手必看!2016年3月1日最新版)
  2. 腾讯面试:打家劫舍 III
  3. SUMO 在LINUX 下安装以及环境变量的配置
  4. OpenFiler 配置iscsi共享式存储
  5. 转list_你知道Java数组转List的三种方式及对比吗?
  6. 如何将dataset中的值赋值给datatable_金融行业实战项目:如何理解业务?
  7. html5文本超过指定行数隐藏显示省略号
  8. Android 系统 (39)---OTA后启动第三方APP出现APP Crash
  9. MySQL学习记录===待续
  10. w2008 R2 401 - 未授权: 由于凭据无效,访问被拒绝。
  11. c++连接mysql的中文编码问题
  12. 贵州大学计算机科学与技术学院排名,贵州大学的计算机专业全国排名第几?
  13. 我们为什么要骑驴找马?
  14. oracle logon 乱码,鼎信诺审计软件2013-2014年度常见问题解答
  15. android运行win7系统,安卓手机安装运行Win7系统教程(图文)
  16. 【编译原理】什么是上下文无关文法、上下文有关文法?
  17. 下载Linux系统中文件到本地电脑
  18. 简述力法计算弹性固定无铰拱的原理_隧道结构力学计算
  19. 我的眼眸,等你路过我的容颜
  20. 帆软报表参数传给网络报表_自定义报表之自定义参数界面

热门文章

  1. 密码中不能包含全角字符的正则表达式
  2. 微信扫描二维码和浏览器扫描二维码 ios和Android 分别进入不用的提示页面
  3. Asp导出到Excel之二
  4. CVE-2018-1000136:Electron nodeIntegration绕过漏洞
  5. Ralink5350开发环境搭建
  6. 转:PHP应用性能优化指南
  7. 【原创】自己编写的JavaGUI一键生成(hibernate/spring/mvc/maven)工具(附带视频教程源码)...
  8. 上班第一天(6)--一个程序员的成长史(15)
  9. 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数
  10. Unity 实现物体破碎效果(转)