2013-02-12 90 views
0

我找的正则表达式,这将匹配任何URL,它以“http”或“https”开头,并且包含特定的域。如果域名是“stackoverflow.com”我应该能够提取所有域和子域从字符串匹配(在.COM而已,所以.NET,.ORG等应不匹配),然后将它们添加到列表循环所有比赛。我怎么做?正则表达式相匹配任何子域

到目前为止,这是我已经找到了最好的解决方法(在搜索一个名为“somestring”字符串,并把结果加入列表“myList中”)

 Regex r = new Regex(@"(?<Protocol>\w+):\/\/(?<Domain>[\[email protected]][\w.:@]+)\/?[\w\.?=%&=\[email protected]/$,]*"); 
     Match m = r.Match(somestring); 
     while (m.Success) 
     { 
      if ((m.Value).Contains("stackoverflow.com")) 
      { 
      myList.Add(m.Value); 
      } 
     m = m.NextMatch(); 
     } 

回答

1

这可能给你什么开始这样做:

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

说明:

https?://

匹配http或https。

(www\.)?

如果www。是存在的,匹配它。

([^\s.]+)

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

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

匹配一个或多个结构域/子域(其由点的,则一个或多个非点非空白字符)。

+0

谢谢你,我会看看我是否能弄明白,一旦我做什么,我会回来后 – 2013-02-12 08:31:52

3

你的意思是 - 要测试的URL是否是在页面上stackoverflow.com或任何其子域(如m.stackoverflow.com。)?

如何解析URL

new Uri("http://stackoverflow.com/questions/14827755/regex-which-matches-any-subdomain").Host 

然后测试主机属性是否与“.stackoverflow.com”结束或等于‘stackoverflow.com’完全吻合。

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

+0

+1这是正确的 - 你不需要正则表达式这一点。 – DanielB 2013-02-12 12:18:42

+0

上校情急之下,我想从一个字符串中提取所有匹配 - 如果字符串为“http://www.http://stackoverflow.comaaaaa kkkkhttp://moo.stackoverflow.comlll ggggghttp://www.something.stackoverflow .comggggg”我想提取的 “http:// stackoverflow.com” 的 “http:// moo.stackoverflow.com” 和 “HTTP:// www.something.stackoverflow.com”,并将其添加到我的清单。该字符串可能包含回车和新行。我在(更新的)问题中发布的解决方案确实如此,但会导致巨大的性能问题。希望这可以让我有点清楚 – 2013-02-12 13:28:42

+0

另一个例子 - 如果我将这个网页的源代码保存为一个字符串,我想提取每一个有效的URL(以http或https开头)并且包含“stackoverflow.com”并将它保存到我的名单。请记住,“stackoverflow.com”只是一个例子,它可以是任何域名,如“google.com”,“moo.net”等。谢谢所有正在尝试帮助 – 2013-02-12 13:34:54