问题场景:
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);
代码注解:
<img
这个不用多说了,图片标签的开始- 接下来紧跟着的
.*?
是非贪婪模式,修饰其后的src
, 即匹配任意字符直至寻找到最近的src
为止 - 接下来的一对
()
括号表示捕捉匹配项 [\'|\"]
表示匹配单引号或者双引号- 接下来紧跟着的
.*?
是非贪婪模式,修饰其后的(\.png|\.jpg|\.gif)
,即匹配任意字符直至寻找到最近的 .png或.jpg或.gif为止 - 接下来紧跟着的
.*?
是非贪婪模式,修饰其后的[\'|\"]
, 即匹配任意字符直至寻找到最近的单引号或双引号为止 - 接下来
.*?[\/]?>
含义是首先这里的第二个?
表示前面的斜杠/
要么有要么没有, 如果匹配到斜杠,则.*?
生效,匹配最近的斜杠/
, 否则匹配最近的>
过滤图片
既然知道了提取,那么过滤就简单了, 使用PHP的 preg_replace()
函数替换即可, 代码如下:
<?php
//省略源码......
preg_replace($pattern, "", $html_code);
版权属于:大卫科技Blog
本文链接:https://www.iyuu.cn/archives/204/
转载时须注明出处