如何仅将URI的域部分与正则表达式匹配?我看到很多例子,但是也可以看到子域名。我要做的是只捕获域名,但我无法弄明白。
因此,例如http://foo.google.tdl/bar
应仅匹配google
。
作为第二个问题,我希望在VB.NET程序上实现它。没有正则表达式会有其他方法吗?
答案 0 :(得分:2)
尝试一下:
^[^\/]+:\/\/[^\/]*?\.?([^\/.]+)\.[^\/.]+(?::\d+)?\/
http://www.rubular.com/r/Uv5ON7eAz4
^ # Match the beginning of the string
[^\/]+:\/\/ # Match the protocol (e.g. http://)
[^\/]*? # Non-greedy match of the sub-domains
\.? # Optional . (for when a sub-domain is used)
([^\/.]+) # Group the domain
\. # . between domain and tld
[^\/.]+ # tld
(?::\d+)? # Optional port
\/ # Slash between tld and path
答案 1 :(得分:1)
不了解VB.NET,但如果您只想要域名部分,并且您确定始终拥有相同的协议,则可以通过四个简单步骤实现目标:
在python中,这大致相当于:
uri = uri.replace('http://', '')
uri = uri.split('/', 1)[0]
uri = uri.rsplit('.', 1)[0]
uri = uri.rsplit('.', 1)[1]
显然,这仅适用于您的特定情况(http前缀,顶级域名),但如果提供的uri未指定协议,没有路径,没有子域,则通常可以工作......