PHP正则匹配“获取文章内容第一张图片”代码

获取正文内容第一张图片这个功能,对于程序开发来说,可以说是很常见的,不管你是把“获取正文内容第一张图片”拿来做缩略图还是做其它的,这都是必不可少的,今天恰好遇到,就顺便笔记一下。

 

第一种方法:preg_match

因为 preg_match() 在第一次匹配后 将会停止搜索。此函数非常适合“获取文章内容第一张图片”这种代码。

 

代码:

 $content = '<p><img alt="202007301596092069425700.jpg" src="/public/uploads/images/2020/10/453535_5f868c0014b66.jpg?x73259" width="1080" height="1350"><br></p>
<p><img alt="202007301594092069425800.jpg" src="/public/uploads/images/2020/10/453535_5f3a3f7aacc62.jpg?x73259" width="1080" height="1350"><br></p>
<p>这是:付杰博客(www.fujieace.com)测试:PHP正则匹配“获取文章内容第一张图片”代码</p>';
        $pattern="/<img.*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png|\.jpeg]))[\'|\"].*?[\/]?>/";
        preg_match($pattern,$content,$match); //参数:$pattern 正则 $content 内容 $match 返回数据
        var_dump($match);

 

最后效果:

如果想要获取第一张图片,请用:$match[1]

array(2) {
  [0]=>
  string(129) "<img alt="202007301596092069425700.jpg" src="/public/uploads/images/2020/10/453535_5f868c0014b66.jpg?x73259" width="1080" height="1350">"
  [1]=>
  string(55) "/public/uploads/images/2020/10/453535_5f868c0014b66.jpg"
}

 

第二种方法:preg_match_all

preg_match_all() 它会一直搜索匹配,直到达到结尾。

 

代码:

  $content = '<p><img alt="202007301596092069425700.jpg" src="/public/uploads/images/2020/10/453535_5f868c0014b66.jpg?x73259" width="1080" height="1350"><br></p>
<p><img alt="202007301594092069425800.jpg" src="/public/uploads/images/2020/10/453535_5f3a3f7aacc62.jpg?x73259" width="1080" height="1350"><br></p>
<p>这是:付杰博客(www.fujieace.com)测试:PHP正则匹配“获取文章内容第一张图片”代码</p>';
        $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";
        preg_match_all($pattern,$content,$matchs); //参数:$pattern 正则 $content 内容 $match 返回数据
        var_dump($matchs);

 

 

最终效果:

可以很清楚的看到,内容中的图片全部都取出来了。

如果想要获取第一张图片,请用:$matchs[1][0]

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(129) "<img alt="202007301596092069425700.jpg" src="/public/uploads/images/2020/10/453535_5f868c0014b66.jpg?x73259" width="1080" height="1350">"
    [1]=>
    string(129) "<img alt="202007301594092069425800.jpg" src="/public/uploads/images/2020/10/453535_5f3a3f7aacc62.jpg?x73259" width="1080" height="1350">"
  }
  [1]=>
  array(2) {
    [0]=>
    string(55) "/public/uploads/images/2020/10/453535_5f868c0014b66.jpg"
    [1]=>
    string(55) "/public/uploads/images/2020/10/453535_5f3a3f7aacc62.jpg"
  }
}

 

第三种方法:HTML标签被编码了,如何:正则匹配“获取文章内容第一张图片”?

 

相信大家都知道,PHP有两个函数:

1、htmlentities() 函数,把字符转换为 HTML 实体。

2、html_entity_decode() 函数,HTML 实体转换回字符 。

 

什么是HTML实体?如下:

&lt;p&gt;www.fujieace.com&lt;/p&gt;gt;

 

什么是HTML字符?也可以直接理解为是HTML标签吧!如下:

<p>www.fujieace.com</p>

 

恰好,今天我也遇到这种情况了,我的文章内容POST接受后,全部都是自动转成了HTML实体,也就是所谓的被编码了。出现这种情况并不是因为我用了相关的函数,而是我用的编辑器自带这个功能,出于安全的考虑,它会自动编码所有的HTML标签。

 

如果是这样,正则匹配图片就需要做一些修改了,具体如下:

 

代码:

$content = '&lt;p&gt;&lt;img alt=&quot;202007301596091427842282.jpg&quot; src=&quot;/public/uploads/images/2020/10/453535_5f86b4d3f06f3.jpg&quot; width=&quot;1080&quot; height=&quot;1349&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt=&quot;202007301596092048232056.jpg&quot; src=&quot;/public/uploads/images/2020/10/453535_5f86b4dc64dd0.jpg&quot; width=&quot;1080&quot; height=&quot;1350&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;这是:付杰博客(&lt;a href=&quot;https://www.fujieace.com&quot; rel=&quot;nofollow&quot;&gt;www.fujieace.com&lt;/a&gt;)测试:PHP正则匹配“获取文章内容第一张图片”代码&lt;br&gt;&lt;/p&gt;gt;';
        $pattern="/&lt;img.*?src=&quot;(.*?(?:[\.gif|\.jpg|\.png|\.jpeg]))&quot;.*?&quot;&gt/";
        preg_match($pattern,$content,$match); //参数:$pattern 正则 $content 内容 $match 返回数据
       var_dump($match);

 

最终效果:

array(2) {
  [0]=>
  string(174) "&lt;img alt=&quot;202007301596091427842282.jpg&quot; src=&quot;/public/uploads/images/2020/10/453535_5f86b4d3f06f3.jpg&quot; width=&quot;1080&quot; height=&quot;1349&quot;&gt"
  [1]=>
  string(55) "/public/uploads/images/2020/10/453535_5f86b4d3f06f3.jpg"
}

 

总结:

这里涉及到一个很重要的知识点,可能很多新手都不是很清楚。

 

在PCRE正则表达式中,我们可以利用圆括号定义一个子组,我们可以使用preg_match相关函数,根据定义,子组(正则表达式中圆括号)中的内容会按照左半边括号出现的顺序,将匹配的内容分别存放至$matches数组中,下标从1开始(下标0的内容为整个匹配的字符串)。

 

这个特性可以让我们很方便地从被匹配的字符串中提取我们需要的信息。PCRE中的子组的功能其实非常强大,但是PHP官方的API文档并没有对它做过多的介绍。

 

我们用 preg_match 或 preg_match_all 的时候,正则表达式中可以用很多圆括号,这样就可以有多个子组,返回多个子组的数据了。例如:

        $content = '<p><img alt="202007301596092069425700.jpg" src="/public/uploads/images/2020/10/453535_5f868c0014b66.jpg?x73259" width="1080" height="1350"><br></p> 
<p><img alt="202007301594092069425800.jpg" src="/public/uploads/images/2020/10/453535_5f3a3f7aacc62.jpg?x73259" width="1080" height="1350"><br></p> 
<p>这是:付杰博客(www.fujieace.com)测试:PHP正则匹配“获取文章内容第一张图片”代码</p>';
        $pattern="/(img).*(src).*(width).*(height).*?/";
        preg_match_all($pattern,$content,$matchs); //参数:$pattern 正则 $content 内容 $match 返回数据 var_dump($matchs);
        var_dump($matchs);

 

最终效果:


array(5) {
  [0]=>
  array(2) {
    [0]=>
    string(120) "img alt="202007301596092069425700.jpg" src="/public/uploads/images/2020/10/453535_5f868c0014b66.jpg?x73259" width="1080" height"
    [1]=>
    string(120) "img alt="202007301594092069425800.jpg" src="/public/uploads/images/2020/10/453535_5f3a3f7aacc62.jpg?x73259" width="1080" height"
  }
  [1]=>
  array(2) {
    [0]=>
    string(3) "img"
    [1]=>
    string(3) "img"
  }
  [2]=>
  array(2) {
    [0]=>
    string(3) "src"
    [1]=>
    string(3) "src"
  }
  [3]=>
  array(2) {
    [0]=>
    string(5) "width"
    [1]=>
    string(5) "width"
  }
  [4]=>
  array(2) {
    [0]=>
    string(6) "height"
    [1]=>
    string(6) "height"
  }
}
    A+
发布日期:2020年10月14日 16:41:00  所属分类:PHP
最后更新时间:2020-10-14 16:41:00
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
付杰
SEO顾问 单站最低999元 整站全方位优化
SEO顾问 单站最低999元 整站全方位优化
  • ¥ 999元
  • 市场价:4999元
wordpress站群服务 泛解析二级域名 二级目录
wordpress站群服务 泛解析二级域名 二级目录
  • ¥ 1999.9元
  • 市场价:8999元
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
  • ¥ 99.9元
  • 市场价:299元
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
  • ¥ 1.0元
  • 市场价:9.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: