2014-02-22 161 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库。