匹配任何子域的正则表达式

时间:2013-02-12 07:45:51

标签: c# regex

我正在寻找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();
       }

2 个答案:

答案 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'。

请参阅http://msdn.microsoft.com/en-us/library/system.uri.aspx

答案 1 :(得分:1)

这可能会让您了解该怎么做:

https?://(www\.)?([^.]+)\.([^.]+.)+

说明:

https?://

匹配http或https。

(www\.)?

如果www。存在,匹配它。

([^\s.]+)

匹配网站的名称(由一个或多个非点非空白字符组成)。

(\.[^\s.]+)+

匹配一个或多个域/子域(由点组成,然后是一个或多个非点非空白字符)。