PHP正则提取或者过滤网页中常见格式图片

问题场景:

PHP正则提取网页中常见格式图片比如:JPG | PNG | GIF 等

PHP代码:

<?php
$html_code = '<a class="help-table" href="http://bbs.aliyun.com/?spm=5176.383338.201.79.DbYWv8" target="_blank"> <img id="myimage" src="//gtms02.alicdn.com/tps/i2/TB1e4XKIXXXXXaNXVXXbKcKJpXX-9
0-60.png" hover="//gtms01.alicdn.com/tps/i1/TB1QjKeIXXXXXabXXXXbKcKJpXX-90-60.png" style="width:45px;"> <span>论坛</span></a><a class="help-table" href="http://docs.aliyun.com/?spm=5176.750001
.501.6.codNbH#/pub" target="_blank"> <img src="//gtms03.alicdn.com/tps/i3/TB1Xzl.IXXXXXbrXpXXbKcKJpXX-90-60.png" hover="//gtms02.alicdn.com/tps/i2/TB1IQ1lIXXXXXblXXXXbKcKJpXX-90-60.png" style=
"width:45px;"> <span>产品文档</span </a>';
 
$pattern = '/<img.*?src=([\'|\"].*?(\.png|\.jpg|\.gif).*?[\'|\"]).*?[\/]?>/is';
 
preg_match_all($pattern, $html_code, $matches);
 
print_r($matches);

代码注解:

  1. <img 这个不用多说了,图片标签的开始
  2. 接下来紧跟着的 .*? 是非贪婪模式,修饰其后的src, 即匹配任意字符直至寻找到最近的 src 为止
  3. 接下来的一对 () 括号表示捕捉匹配项
  4. [\'|\"] 表示匹配单引号或者双引号
  5. 接下来紧跟着的 .*? 是非贪婪模式,修饰其后的(\.png|\.jpg|\.gif),即匹配任意字符直至寻找到最近的 .png或.jpg或.gif为止
  6. 接下来紧跟着的 .*? 是非贪婪模式,修饰其后的[\'|\"], 即匹配任意字符直至寻找到最近的单引号或双引号为止
  7. 接下来.*?[\/]?> 含义是首先这里的第二个?表示前面的斜杠 / 要么有要么没有, 如果匹配到斜杠,则 .*? 生效,匹配最近的斜杠 /, 否则匹配最近的 >

过滤图片

既然知道了提取,那么过滤就简单了, 使用PHP的 preg_replace() 函数替换即可, 代码如下:

<?php
//省略源码......
preg_replace($pattern, "", $html_code);

原文链接 http://www.blogdaren.com/post-2265.html

最后修改:2019 年 08 月 28 日 07 : 51 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论