PHP 正则表达式 获取富文本中的 img标签的src属性

时间:2022-07-24
本文章向大家介绍PHP 正则表达式 获取富文本中的 img标签的src属性,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
  • 前言 鄙人发现对于微信看看中的文章,一般都会有三张摘要图片; 所以想着可以直接提取富文本中的 <img>标签的 src 属性信息; 这样就可以在前台的 文章列表中展示三张图片(建议不要多了),吸引阅读,美化布局…
  • 环境
 - 首先要知道,虽然正则表达式学习起来比较通用,但是不同的语言还是会有所差异;
 - 我选用的是 PHP语言,所以需要提醒下参考环境,虽然问题也不大
  • 场景分析
 起先我测试使用的正则表达式如下:'/<imgb.+bsrcbs*=s*['"]([^'"]*)['"]/iU';
 想着可以一次性匹配出需要的信息;
 但是发现遇到很多阻碍(主要还是不够扎实)
 后面发现可以先匹配出  <img> 标签:'/<imgb.*?(?:>|/>)/i'
 然后再循环匹配出 src 属性信息:'/bsrcbs*=s*['"]?([^'"]*)['"]?/i'
 既便于理解,又不影响效果!!

【分析时的注重点】

- 1. <img> 标签是忽略大小写的,并且 标签结尾 使用 > 或者 />
- 2. src 属性信息一般是以".jpg|.png|.jpeg|.gif"结尾的;
     但是也有的不需要扩展没那个结尾(只是个图片链接)
- 3. 注意匹配的结尾形式  ([^'"]*)  匹配不上单引号和双引号的字符
  • 整理后的处理源码如下:
/**
 * 对富文本信息中的数据
 * 匹配出所有的 <img> 标签的 src属性
 * @param string $contentStr 富文本字符串
 * @return array
 *
 */
function getPatternMatchImages($contentStr = ""){
    $imgSrcArr = [];
    //首先将富文本字符串中的 img 标签进行匹配
    $pattern_imgTag = '/<imgb.*?(?:>|/>)/i';
    preg_match_all($pattern_imgTag,$contentStr,$matchIMG);
    if (isset($matchIMG[0])){
        foreach ($matchIMG[0] as $key => $imgTag){
            //进一步提取 img标签中的 src属性信息
            $pattern_src = '/bsrcbs*=s*['"]?([^'"]*)['"]?/i';
            preg_match_all($pattern_src,$imgTag,$matchSrc);
            if (isset($matchSrc[1])){
                foreach ($matchSrc[1] as $src){
                    //将匹配到的src信息压入数组
                    $imgSrcArr[] = $src;
                }
            }
        }
    }
    //$pattern= '/<imgb.+bsrcbs*=s*['"]([^'"]*)['"]/iU';
    return $imgSrcArr;
}

【附录】