0

我正在寻找正则表达式,它将匹配任何以“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();
       }
4

2 回答 2

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

于 2013-02-12T12:17:38.483 回答
1

这可能会让你开始做什么:

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

解释:

https?://

匹配 http 或 https。

(www\.)?

如果万维网。存在,匹配它。

([^\s.]+)

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

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

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

于 2013-02-12T08:05:25.960 回答