.net 用于解析网页链接的正则表达式?

.net 用于解析网页链接的正则表达式?,.net,html,regex,.net,Html,Regex,我正在寻找一个.NET正则表达式从网页中提取所有URL,但还没有找到一个足够全面的方法来涵盖指定链接的所有不同方式 还有一个附带问题: 是否有一个正则表达式来管理所有的正则表达式?或者我最好使用一系列不太复杂的正则表达式,而只是对原始HTML使用多个传递?(速度与可维护性)查看URI规范。那对你会有很大帮助。就性能而言,您几乎可以在一个普通网页中提取所有HTTP链接。当我说谦虚时,我绝对不是指像ELisp手册那样的一页包罗万象的HTML手册。此外,表演也是一个敏感的话题。我的建议是测量您的性能,

我正在寻找一个.NET正则表达式从网页中提取所有URL,但还没有找到一个足够全面的方法来涵盖指定链接的所有不同方式

还有一个附带问题:


是否有一个正则表达式来管理所有的正则表达式?或者我最好使用一系列不太复杂的正则表达式,而只是对原始HTML使用多个传递?(速度与可维护性)

查看URI规范。那对你会有很大帮助。就性能而言,您几乎可以在一个普通网页中提取所有HTTP链接。当我说谦虚时,我绝对不是指像ELisp手册那样的一页包罗万象的HTML手册。此外,表演也是一个敏感的话题。我的建议是测量您的性能,然后决定是使用单个正则表达式提取所有链接,还是使用多个更简单的正则表达式提取所有链接


URL的?在图像/脚本/css/等中

%href=“(.[”]*)”%


这将从所有a标记捕获URL,只要HTML作者使用引号:

<a[^>]+href="([^"]+)"[^>]*>

我没有时间尝试和思考一个可能不起作用的正则表达式,但我想说的是,你应该非常明确地分解你的正则表达式,至少如果它达到:

(?:(?:\r\n)?[\t])*(?:(?:(?:[^()@;:\\”\[\]\000-\031]+(?:(?:(?:\r\n)?[\t]
)+|\Z |(?=[\[“()@,;:\\”\[\]]))124;“(?:[^\“\r\\]\\.\.\。。。(?:(?:\r\n)?[\t])*”(?:(?:)
\r\n)?[\t])*(?:\。(?:(?:\r\n)?[\t])*(?:[^()@;:\\”\[\]\000-\031]+(?:(?:)(
?:\r\n)?[\t])+\Z|(?=[\[“()@,;:\\”\[\]])))124;“(?:[^\“\r\\]\\\\.\。|(?:(?:\r\n)?[
\t] )*“(?:(?:(?:\r\n)?[\t])*)*@(?:(?:\r\n)?[\t])*(?:[^()@;:\\”\[\]\000-\0
....剪断*。。。。
*))*@(?:(?:\r\n)?[\t])*(?:[^()@;:\\”\[\]\000-\031]+(?:(?:(?:\r\n)?[\t])
+|\Z |(?=[\[“()@,;:\\”\[\]]))\[([^\[\]\r\\]\\\\].*])(?:(?:(?:\r\n)?[\t])*)(?:\
.(?:(?:\r\n)?[\t])*(?:[^()@;:\\”\[\]\000-\031]+(?:(?:(?:\r\n)?[\t])+\124z
|(?=[\[“()@,;:\\”\[\]]))\[([^\[\]\r\\]\\\\\].*\](?:(?:\r\n)?[\t])*)*>(?:(
?:\r\n)?[\t])*)*)?;\s*)
(这应该与电子邮件地址匹配)

编辑:我甚至不能把它放在一个帖子上,太恶心了

((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)
这是我从你那里拿的


[编者注:{1}在这个正则表达式中没有真正的函数;]

所有的HTTP和MAILTO

(["'])(mailto:|http:).*?\1
href或src调用的所有链接,包括相关链接

#Matches things in single or double quotes, but not the quotes themselves
(?<=(["']))((?<=href=['"])|(?<=src=['"])).*?(?=\1)

#Maches thing in either double or single quotes, including the quotes.
(["'])((?<=href=")|(?<=src=")).*?\1
#匹配单引号或双引号中的内容,但不匹配引号本身
(?使用,您可以使用:

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
Response.Write(link["href"].Value);
}
doc.Save("file.htm");

从RegexBuddy库:

URL:全文查找 最后一个字符类确保,如果URL是某些文本的一部分,则URL后面的逗号或句号等标点符号不会解释为URL的一部分

\b(https?| ftp |文件)://[-A-Z0-9+&@#/%?=~ |!:,.;]*[-A-Z0-9+&@#/%=~ |]

从任何文本(不仅仅是HTML)提取url

强制性提及
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
Response.Write(link["href"].Value);
}
doc.Save("file.htm");
(http\\://[:/?#\\[\\]@!%$&'()*+,;=a-zA-Z0-9._\\-~]+)