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

Regex 如何使用正则表达式提取HTML img源代码?,regex,asp-classic,vbscript,Regex,Asp Classic,Vbscript,我需要从HTML文档中的所有图像标记中提取src元素 因此,输入是一个HTML页面,输出是指向图像的URL列表: ex 以下是我到目前为止的想法: <img\s+src=""(http://.*?) 这不适用于src不直接位于img标记之后的标记,例如: <img height="1px" src="spacer.gif"> 有人能帮忙完成这个正则表达式吗?这很简单,但我认为这可能是获得答案的更快的方法。下面的regexp代码片段应该可以工作 <img[^>

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

因此,输入是一个HTML页面,输出是指向图像的URL列表: ex

以下是我到目前为止的想法:

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

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

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


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

下面的regexp代码片段应该可以工作

<img[^>]+src="([^">]+)"
]+)”
它会查找以
开头的文本。然后它会获取从该点到下一个
之间的所有内容


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

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

见例。

下面是一个很好的解决方案:


使用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
} 
var images=document.getElementsByTagName(“img”);
对于(i=0;i
这对我很有用
$regexp=']+?)(?=\“\\”);
if(preg_match_all(“/$regexp/”,$content,$matches,preg_SET_ORDER)){
如果(!空($matches)){

对于($i=0;$i),它不适用于单引号标记,请记住,HTML实际上不需要在属性上加引号,除非它们包含空格。如果有以字母
src
结尾的标记,也不适用,例如,如果图像有
数据src
标记,则此操作无效。
]+(?:“|”)
这将查找以单引号/双引号(无捕获)开头的字符串;然后捕获一个或多个非单引号/双引号或
;然后是单引号/双引号(无捕获)。此选项适用于单引号/双引号,并且不会拾取具有“src”的其他属性,如
数据src
$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;

        }

    }

}