RegEx从HTML内容获取href和src

本文关键字:href src 获取 HTML RegEx | 更新日期: 2023-09-27 18:14:10

我试图从HTML字符串中提取href和src链接。根据这篇文章,我能够得到图像部分。有人可以帮助调整正则表达式,包括集合中的href URL吗?

public List<string> GetLinksFromHtml(string content)
{
    string regex = @"<img[^>]*?src's*='s*[""']?([^'"" >]+?)[ '""][^>]*?>";
    var matches = Regex.Matches(content, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
    var links = new List<string>();
    foreach (Match item in matches)
    {
        string link = item.Groups[1].Value;
        links.Add(link);
    }
    return links;
}

RegEx从HTML内容获取href和src

ok Doke!没有"额外的库"answers"快速和轻松",这就是:

<(?<Tag_Name>(a)|img)'b[^>]*?'b(?<URL_Type>(?(1)href|src))'s*='s*(?:"(?<URL>(?:''"|[^"])*)"|'(?<URL>(?:'''|[^'])*)')

或c#字符串:

@"<(?<Tag_Name>(a)|img)'b[^>]*?'b(?<URL_Type>(?(1)href|src))'s*='s*(?:""(?<URL>(?:''""|[^""])*)""|'(?<URL>(?:'''|[^'])*)')"

这将标签名称(aimg)捕获到组"Tag_Name"中,URL类型(hrefsrc)捕获到组"URL_Type"中,URL捕获到组"URL"中(我知道,我对组名称有点创意)。

它处理任何类型的引号("'),即使URL中的任何类型的引号都应该已经编码成实体,它将忽略任何单转义的引号字符'''"

它不会忽略未关闭的标签(因此格式错误的HTML),它会为其中一个标签(如<aimg)找到一个开口,然后继续忽略除大于(>)之外的所有内容,直到它找到匹配的URL类型的属性(a标签的hrefimg标签的src),然后匹配内容。然后它退出,不担心标签的其余部分!

如果你想让我为你分解它,请告诉我,但这里是它为这一页所做的匹配样本:

<Match>                                  'Tag' 'URL_Type' 'URL'
---------------------------------------- ----- ---------- -----------------------------
<a href="http://meta.stackoverflow.com"   a     href      http://meta.stackoverflow.com
<a href="/about"                          a     href      /about
<a href="/faq"                            a     href      /faq
<a href="/"                               a     href      /
<a id="nav-questions" href="/questions"   a     href      /questions
...
<img src="/posts/8066248/ivc/d499"        img   src       /posts/8066248/ivc/d499

总共发现140个标签(我假设额外的海报会增加这个数字)

我刚刚画出了这个快速的Regex表达式,但经过测试和工作,告诉我这是否适合您的需要。(url和img是名称分组的,所以他们很容易检索)

<a(.*?)href="(?P<url>.*?)"(.*?)><img(.*)src="(?P<img>.*?)"(.*?)></a>

你也可以通过添加?<a></a>标签的签名,如下所示:

(<a(.*?)href="(?P<url>.*?)"(.*?)>)?(<img(.*)src="(?P<img>.*?)"(.*?)>)(</a>)?

Shai

太可怕了!因为用正则表达式解析html是邪恶的

 <img[^>]*?src's*='s*[""']?([^'"" >]+?)[ '""][^>]*?href's*='s*[""']?([^'"" >]+?)[ '""][^>]*?>

下面的代码可以帮助您获得html中的每个链接,获得它们后,您可以在链接中获得更多细节元素:

string html = "123<a href='"http://www.codeios.com/home.php'">123123</a>789";
Regex r = new Regex(@"<a.*?href=(""|')(?<href>.*?)(""|').*?>(?<value>.*?)</a>");
foreach (Match match in r.Matches(html))
{
    string url = match.Groups["href"].Value;
    string text = match.Groups["value"].Value;
    Response.Write(url + text);
}

有几个地方可以找到链接和图像。

-Link
    -href
        (?<AttributeName>(?:href))'s*='s*["'](?<AttributeValue>(?:[^"'])*)
        for c# = (?<AttributeName>(?:href))'s*='s*[""'](?<AttributeValue>(?:[^""'])*)

检查这里

-Image
    -Image_DirectSource
        -src
        -background
            (?<AttributeName>(?:src|background))'s*='s*["'](?<AttributeValue>(?:[^"'])*)
            for c# = (?<AttributeName>(?:src|background))'s*='s*[""'](?<AttributeValue>(?:[^""'])*)

检查这里

    _Image_IndirectSource   
        -style
            -background:url()
            background's*:'s*url's*'('s*(?<AttributeValue>(?:[^)])*)
这里的

检查