我需要从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">
有人可以帮助完成这个正则表达式吗?这很简单,但我认为这可能是获得答案的更快捷方式。
答案 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?
这是一个很好的解决方案:
答案 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;
}
}
}