我正在使用VC++并尝试从接收到的URL解析ip(ipv4/ipv6)地址。有什么办法可以做到这一点吗?我知道一种方法是迭代url中的每个字符,并在ipv6的url中查找[和]。这似乎不是一个好方法,所以想知道是否有任何功能,可以帮助我从URL中提取IP地址?从url解析ipv6地址
例如我已经URL如下面给出的,
http://[fe80::222:bdff:fef5:56a4]:80/index.html?version=1.0 & ID = 1
我正在使用VC++并尝试从接收到的URL解析ip(ipv4/ipv6)地址。有什么办法可以做到这一点吗?我知道一种方法是迭代url中的每个字符,并在ipv6的url中查找[和]。这似乎不是一个好方法,所以想知道是否有任何功能,可以帮助我从URL中提取IP地址?从url解析ipv6地址
例如我已经URL如下面给出的,
http://[fe80::222:bdff:fef5:56a4]:80/index.html?version=1.0 & ID = 1
由于您用visual-c++标记了该问题,因此我建议您使用wininet库中的InternetCrackUrl()进行解析。
来自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饼干:
my ($protocol, $domain, $port, $path, $query, $fragment) = $url =~
m!
^([^:/]*://)?
((?:\[[^]]*]) | (?:[^:/\\\#?]*))
(:\d+)?
(/[^?#]*)?
(\?[^#]*)?
(\#.*)?
!x;
它应该是直着将其转换成一个C++ regex库。
使用正则表达式吗? – Cornstalks
我认为Regex会帮助我确认输入的ipv4/ipv6是否有效。我如何使用正则表达式解析/提取ipv4/ipv6? – Jignesh
您可以使用捕获组来提取IP。任何像样的正则表达式库都支持捕获组。 – Cornstalks