Regex 如何使用正则表达式提取HTML img源代码?
我需要从HTML文档中的所有图像标记中提取src元素 因此,输入是一个HTML页面,输出是指向图像的URL列表: ex 以下是我到目前为止的想法: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[^>
<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;
}
}
}