2010-02-27 40 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正則表達式兼容。