2014-02-22 205 views
0

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

+0

使用正則表達式嗎? – Cornstalks

+0

我認爲Regex會幫助我確認輸入的ipv4/ipv6是否有效。我如何使用正則表達式解析/提取ipv4/ipv6? – Jignesh

+0

您可以使用捕獲組來提取IP。任何像樣的正則表達式庫都支持捕獲組。 – Cornstalks

回答

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餅乾:

my ($protocol, $domain, $port, $path, $query, $fragment) = $url =~ 
    m! 
     ^([^:/]*://)? 
     ((?:\[[^]]*]) | (?:[^:/\\\#?]*)) 
     (:\d+)? 
     (/[^?#]*)? 
     (\?[^#]*)? 
     (\#.*)? 
    !x; 

它應該是直着將其轉換成一個C++ regex庫。