如何使用正则表达式提取HTML img源?

时间:2009-06-22 17:06:51

标签: regex asp-classic vbscript

我需要从HTML文档中的所有图像标记中提取src元素。

因此,输入是一个HTML页面,输出将是指向图像的URL列表: 前...... http://www.google.com/intl/en_ALL/images/logo.gif

以下是我到目前为止提出的建议:

<img\s+src=""(http://.*?)

这不适用于src不在img标记之后的标记,例如:

<img height="1px" src="spacer.gif">

有人可以帮助完成这个正则表达式吗?这很简单,但我认为这可能是获得答案的更快捷方式。

4 个答案:

答案 0 :(得分:18)

以下正则表达式代码段应该有效。

<img[^>]+src="([^">]+)"

它会查找以<img开头的文字,后跟一个或多个不是>的字符,然后是src="。然后,它会抓取该点与下一个">之间的所有内容。

但是,如果可能的话,使用真正的HTML解析器。它更加坚固,可以更好地处理边缘情况。

答案 1 :(得分:10)

你不想这样做。正确解析HTML是一个非常复杂的问题,正则表达式不是一个好的工具。

参见例如 Can you provide some examples of why it is hard to parse XML and HTML with a regex?

这是一个很好的解决方案:

How do I programatically inspect a HTML document

答案 2 :(得分:4)

您可以使用Javascript轻松完成此操作。一个例子如下:

var images = document.getElementsByTagName("img");

for (i=0; i < images.length; i++)
{
   // get image src
   var currImage = images[i].src;

   // do link creation here
} 

答案 3 :(得分:1)

这对我很有用

$regexp = '<img[^>]+src=(?:\"|\')\K(.[^">]+?)(?=\"|\')';

if(preg_match_all("/$regexp/", $content, $matches, PREG_SET_ORDER)) {

    if( !empty($matches) ) {

        for ($i=0; $i <= count($matches); $i++)

        {
            $img_src = $matches[$i][0];

            echo $img_src;

        }

    }

}