2010-02-27 49 views
0

我很新,对C++和boost。 我试图让一个给定的URL的主机名:Boost正则表达式查找主机/域名

这是我现在有:

int main() 
{ 
    string url = "http://www.amazon.com/gp/product/blabla"; 

//Regular Expression from Javascript. 
    boost::regex ex("/^((\w+):\/\/\/?)?((\w+):?(\w+)[email protected])?([^\/\?:]+):?(\d+)?(\/?[^\?#;\|]+)?([;\|])?([^\?#]+)?\??([^#]+)?#?(\w*)/"); 

    boost::regex_search(url, ex); 
    // I want it to get "http://www.amazon.com/". 
} 

,我得到吨的错误:“无法识别的字符转义序列” 我把这个来自Javascript的正则表达式。我不确定我能做到这一点。

除了Perl,我可以在'Boost.regex'中使用的正则表达式类型是什么? 是否有任何一种正则表达式转换器? (因为我将大量代码从Javascript转换为C++,并且我有更多的正则表达式)。

顺便说一句,这是我在Javascript功能:

parseHostname: function(url) 
{ 
    m = /^((\w+):\/\/\/?)?((\w+):?(\w+)[email protected])?([^\/\?:]+):?(\d+)?(\/?[^\?#;\|]+)?([;\|])?([^\?#]+)?\??([^#]+)?#?(\w*)/.exec(url) || []; 
    return m[6]; 
}, 

要查看与PCRE和完整的代码这个例子 - link

回答

1

由于反斜杠(\)是C(& C++)字符串常量中的转义字符,因此您需要将其转义。

即代替\的所有实例\\

LOL。我对这篇文章有同样的问题!所有的反斜杠都消失了,因为我忘了逃避它们。

请检查此page以查看Boost中可用的不同正则表达式类型。它有一个只能映射到正常的JavaScript类型,这意味着默认值与JavaScript正则表达式兼容。