正则表达式匹配子域名?

时间:2011-07-23 23:48:40

标签: c# asp.net regex

到目前为止,我有以下内容:

^((http[s]?|ftp):\/\/)(([^.:\/\s]*)[\.]([^:\/\s]+))(:([^\/]*))?(((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?)?$

正在测试这些:

https://www.google.com.ar:8080/dir/1/2/search.html?arg=0-a&arg1=1-b&arg3-c#hash 
https://google.com.ar:8080/dir/1/2/search.html?arg=0-a&arg1=1-b&arg3-c#hash 
https://google.com:8080/dir/1/2/search.html?arg=0-a&arg1=1-b&arg3-c#hash 
http://www.foo.com
http://www.foo.com/
http://blog.foo.com/
http://blog.foo.com.ar/
http://foo.com
http://blog.foo.com
http://foo.com.ar

我正在使用以下工具测试正则表达式:regex tester

到目前为止,我已经能够产生以下群体:

  1. 完整协议
  2. 简化协议
  3. 完整域名
  4. 子域
  5. 顶级域名
  6. 端口
  7. 端口号
  8. 其余的网址
  9. “目录”的其余部分
  10. 不知道如何放弃这个群体
  11. 页面名称
  12. 参数字符串
  13. 参数字符串
  14. 哈希标记
  15. 哈希标记
  16. 我将使用此正则表达式为我的应用程序更改跨域重定向超链接的子域。

    使用Request.Url作为参数,我想从

    重定向

    http://example.comhttp://www.example.comhttp://blog.example.com

    我怎样才能做到这一点?

    我无法确定当前的子域名(例如,无论是www,博客或论坛)是什么,如果有的话......

    进行此替换的最佳方法是什么?

    我真正需要的是找出顶级域名的方法。在http://www.example.comhttp://blog.example.comhttp://example.com中,我想获得example.com

3 个答案:

答案 0 :(得分:1)

  

进行此替换的最佳方法是什么?

这可能不是您正在寻找的答案......但IMO最好的方法是使用System.Uri类。

Uri课程可以轻松地为您提取Host - 然后您可以{“1}}主持人”。“分隔符 - 这应该很容易让您访问当前的子域。


这只是我的观点 - 特别是因为我发现很难维护像split这样的正则表达式代码

答案 1 :(得分:1)

您可以使用Uri类来解析字符串。除了细分之外,还有许多可用的属性:

Uri MyUri = new Uri("https://www.google.com.ar:8080/dir/1/2/search.html?arg=0-a&arg1=1-b&arg3-c#hash");

foreach (String Segment in MyUri.Segments)
    Response.Write(Segment + "<br />");

答案 2 :(得分:0)

我认为你应该重新考虑在这种情况下是否确实需要使用RegEx;

  • 我认为从URL中提取顶级域名非常简单;在“http://www.example.com/?blah=111”的情况下,你可以简单地在第3个斜杠之前取部分并执行String.Split('。')并连接最后两个数组项。如果是“http://www.example.com”,则更容易。

    • 正则表达式模式非常容易出错并且很难维护,据我所知,你不会有任何优势。我建议你摆脱正则表达式。也许结果将是2到3行代码,但它会起作用,你的代码将更易读,更容易理解。