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;
}
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>(?:'''|[^'])*)')"
这将标签名称(a
或img
)捕获到组"Tag_Name"中,URL类型(href
或src
)捕获到组"URL_Type"中,URL捕获到组"URL"中(我知道,我对组名称有点创意)。
它处理任何类型的引号("
或'
),即使URL中的任何类型的引号都应该已经编码成实体,它将忽略任何单转义的引号字符''
和'"
。
它不会忽略未关闭的标签(因此格式错误的HTML),它会为其中一个标签(如<a
或img
)找到一个开口,然后继续忽略除大于(>
)之外的所有内容,直到它找到匹配的URL类型的属性(a
标签的href
和img
标签的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>(?:[^)])*)
这里的检查