我们使用 Boost C++ 正则表达式来匹配 SIP Via 头部中的以下内容。
我们希望能获取IP地址后的rport,received和stck参数。我们可以使用上述表达式来获取IP地址,但是在获取单独的参数时会遇到问题。
rport参数可以是;rport或;rport=14838,即单独出现或与值一起出现。
我们面临的问题是,像;branch= ;received=这样的参数可能位于不同的位置。
Via: SIP/2.0/UDP 192.168.1.4:62486;rport;branch=z9hG4bK-524287-1---3ff9a622846c0a01;stck=3449406834;received=90.206.135.26
正则表达式:
std::regex g_Via;
g_Via("(^Via:\\s+SIP/2\\.0/UDP\\s+)(((\\w|\\.|-)+):(\\d+))((;\\s*rport=(\\d+))|(;stck=(\\d+))|(;[^;\\n\\s]+)*)(\\s*$)",std::regex_constants::icase)
std::match_results<std::string::const_iterator> result;
bool valid = std::regex_match(line, result, g_Via);
if(valid)
{
std::string rport = result[8].str();
std::string stckval = result[9].str();
// use these values
}
我们希望能获取IP地址后的rport,received和stck参数。我们可以使用上述表达式来获取IP地址,但是在获取单独的参数时会遇到问题。
rport参数可以是;rport或;rport=14838,即单独出现或与值一起出现。
我们面临的问题是,像;branch= ;received=这样的参数可能位于不同的位置。