题
我在寻找一个。净经常表达的提取的所有网址从一个网页,但还没有找到一个全面到足以复盖所有不同的方式可以指定一个链接。
和侧面的问题:
有没有 一个regex来统治他们的所有?或者我最好使用一系列不太复杂的正常表现形式和只使用复式传递反对的原HTML?(速度与维护性)
解决方案
其他提示
从RegexBuddy图书馆:
URL:现在全文
最后的字符类可确保如果一个网址一部分的一些文字、标点符号等一个逗号或完全停止后的网址是没有解释为部分的网址。
\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]
与 Html灵活性包, 你可以使用:
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");
看看URI规范。这可以帮助你有很多。和尽可能表现的话,你几乎可以提取的所有HTTP链接在一个温和的网页。当我说温和的我绝对做不意味着一个页面都包括HTML手册喜欢这样的工作基本是在封闭的情况下进行手册。还能是一个敏感的话题。我的建议将会测量你的性能,然后再决定如果你要取的所有链接,使用一个单一的regex或多个简单的regex表达方式。
所有HTTP的和邮寄的
(["'])(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
第二个只会给你的链接,使用双引号,但是。
我没有时间来尝试,并认为regex,可能不会的工作,但是我想要评论的,你应该多数肯定打破了你的regex,至少如果它得到 这一级别的丑陋:
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
....*SNIP*....
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
(这理应相匹配的电子邮件地址)
编辑:我甚至不能适应它在上一个员额这么讨厌。...
URL?如图像/scripts/css/。
%href="(.["]*)"%
根据 http://tools.ietf.org/html/rfc3986
提取url从任何文本(不仅HTML)
(http\\://[:/?#\\[\\]@!%$&'()*+,;=a-zA-Z0-9._\\-~]+)
不隶属于 StackOverflow