我正在使用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