我正在使用VC ++并尝试从收到的url解析ip(ipv4 / ipv6)地址。有什么方法可以实现这一点。我知道一种方法是遍历url中的每个字符,并在ipv6的url中查找[和]。这似乎不是一个好方法,所以想知道是否有任何函数可以帮助我从URL中提取IP地址?
例如我的网址如下,
的http:// [FE80 :: 222:bdff:fef5:56a4]:80 / index.html的版本= 1.0和ID = 1
答案 0 :(得分:1)
由于您使用visual-c++标记了问题,我建议您使用wininet库中的InternetCrackUrl()进行解析。
答案 1 :(得分:0)
来自url解析器的一些代码。正则表达式过度。
// Look for IPv6
if( s[domain_start] == '[' ) {
pos = s.find(']', domain_start);
if (pos != string::npos && pos < domain_end && s[pos+1] == ':')
++pos;
else
pos = string::npos;
} else {
pos = s.find(':', domain_start);
}
但是,如果您喜欢正则表达式,请参阅Perl URL cracker:
my ($protocol, $domain, $port, $path, $query, $fragment) = $url =~
m!
^([^:/]*://)?
((?:\[[^]]*]) | (?:[^:/\\\#?]*))
(:\d+)?
(/[^?#]*)?
(\?[^#]*)?
(\#.*)?
!x;
将它转换为C ++正则表达式库应该是直截了当的。