到目前为止,我有以下内容:
^((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
到目前为止,我已经能够产生以下群体:
我将使用此正则表达式为我的应用程序更改跨域重定向超链接的子域。
使用Request.Url
作为参数,我想从
http://example.com
或http://www.example.com
至http://blog.example.com
我怎样才能做到这一点?
我无法确定当前的子域名(例如,无论是www,博客或论坛)是什么,如果有的话......
进行此替换的最佳方法是什么?
我真正需要的是找出顶级域名的方法。在http://www.example.com
,http://blog.example.com
或http://example.com
中,我想获得example.com
。
答案 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”,则更容易。