我正在寻找Regex,它将匹配任何以“http”或“https”开头且包含特定域的URL。如果域是“stackoverflow.com”,我应该能够从字符串中提取所有域和子域匹配(仅限.com,因此.net,.org等不应匹配),然后将它们添加到列表中循环所有比赛。我该怎么做?
到目前为止,这是我找到的最佳解决方法(搜索名为“somestring”的字符串并将结果添加到列表“myList”)
Regex r = new Regex(@"(?<Protocol>\w+):\/\/(?<Domain>[\w@][\w.:@]+)\/?[\w\.?=%&=\-@/$,]*");
Match m = r.Match(somestring);
while (m.Success)
{
if ((m.Value).Contains("stackoverflow.com"))
{
myList.Add(m.Value);
}
m = m.NextMatch();
}
答案 0 :(得分:3)
您的意思是 - 您想测试url是否位于stackoverflow.com或其任何子域(例如m.stackoverflow.com)上的页面?
如何解析网址
new Uri("http://stackoverflow.com/questions/14827755/regex-which-matches-any-subdomain").Host
然后测试Host属性是以'.stackoverflow.com'结尾还是等于'stackoverflow.com'。
答案 1 :(得分:1)
这可能会让您了解该怎么做:
https?://(www\.)?([^.]+)\.([^.]+.)+
说明:
https?://
匹配http或https。
(www\.)?
如果www。存在,匹配它。
([^\s.]+)
匹配网站的名称(由一个或多个非点非空白字符组成)。
(\.[^\s.]+)+
匹配一个或多个域/子域(由点组成,然后是一个或多个非点非空白字符)。