从html中提取所有图像url,注释掉的除外

本文关键字:注释 url 图像 html 提取 | 更新日期: 2023-09-27 18:25:47

我使用这个正则表达式来获取html文件中的所有图像URL:

(?<=img's*'S*src'=['x27'x22])(?<Url>[^'x27'x22]*)(?=['x27'x22])

有什么方法可以修改这个正则表达式以排除任何用html注释"注释掉的img标记吗?

从html中提取所有图像url,注释掉的除外

如果您的正则表达式已经可以提取图像(这本身就是一个奇迹),请考虑使用正则表达式来剥离HTML注释,如下所示:

<!--.*?-->

用一个空字符串替换它,注释中的任何图像都将不再显示在另一个正则表达式中。

或者,如果您使用的是PHP(您没有标记编程语言),则可以使用strip_tags函数,并将"<img>"作为"允许的标记"参数。这将去掉HTML注释,以及可能干扰正则表达式的其他标记。

在使用HTML敏捷性包时,实际上也很简单,其中有一组设置可以在需要时帮助修复糟糕的HTML。类似:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.OptionAutoCloseOnEnd = true;
doc.OptionCheckSyntax = false;
doc.OptionFixNestedTags = true;
// etc, just set them before calling Load or LoadHtml

http://htmlagilitypack.codeplex.com/

string textToExtractSrcFrom = "... your text here ...";
doc.LoadHtml(textToExtractSrcFrom);
var nodes = doc.DocumentNode.SelectNodes("//img[@src]") ?? new HtmlNodeCollection();
foreach (var node in nodes)
{
    string src = node.Attributes["src"].Value;
}
//or 
var links = nodes.Select(node => node.Attributes["src"].Value);