最近在 WordPress 某项目中需要从文章内容中匹配多个图片,在实践的过程中掉进坑里爬了很久才出来。最开始我使用的正则表达式如下:
-
<img.*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png|\.jpeg]))[\'|\"].*?[\/]?>
然而使用这个正则表达式来匹配图片的话就会有一个缺陷,如果 src 里面的值不是一个标准的图片地址,那么很有可能就会匹配出错。比如下面的代码,内容中共有三个 img 标签,其中第二个 img 的 src 属性是 http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,m_fixed,h_100,w_100
<?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=[\'|\"](.*?(?:[\.gif|\.jpg|\.png|\.jpeg]))[\'|\"].*?[\/]?>/";