直接上代码:

$htmlStr = '...'; 
$imagePattern = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/";
preg_match_all($imagePattern, $htmlStr, $matches);
print_r($matches);

参考

正确匹配图片地址的方法

指导思想:我们匹配的时候,不要限定图片路径格式,也就是不管图片的 src 属性值是合规还是不合规,先匹配出来,再处理。所以使用下面的正则表达式即可。

<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>

先把 img 标签里面的 src 值匹配出来,判断这个值是否合规,参考代码如下:

<?php
$content = '<p>我是第一段</p><p>我是第二段图片前文字<img src="http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg" />我是第三段图片前文字<img src="http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,m_fixed,h_100,w_100" /><img src="http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg" /></p><p>我是第四段文字</p>';

$image_pattern = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/";
preg_match_all( $image_pattern, $content, $matches );

if( !empty( $matches[1]) ){
    //循环匹配到的src
    foreach ($matches[1] as $src) {
        $src_real = strtok($src,'?'); //分割,去掉请求参数
        $ext = pathinfo( $src_real, PATHINFO_EXTENSION ); //获取拓展名
        if( in_array( $ext, ['jpg','jpeg','gif','png'] ) ){
            echo $src_real.PHP_EOL;
        }
    }
}

标签: php, 正则, html