2010-09-03 42 views
0

包括

#include <algorithm> 
#include<boost/algorithm/string.hpp> 
#include<boost/regex.hpp> 
    using namespace std; 
    using namespace boost; 

    string _getBasehtttp(string url) 
    { 

     regex exrp("^(?:http://)?([^\\/]+)(.*)$"); 

     match_results<string::const_iterator> what; 

     if(regex_search(url, what, exrp)) 

     { 

      string base(what[1].first, what[1].second); 

      return base; 
     } 
     return ""; 
} 
int main() { 

    cout << _getBasehtttp("httpasd://www.google.co.in"); 
} 

如果我輸入http://www.google.co.in我正在返回www.google.com但如果我輸入httpasd://www.google.co.in我得到httpasd ..there不應該有任何的比賽吶Ÿ我得到了比賽???最新錯誤與我的C + + boost正則表達式函數?

回答

0

^(?:http://)?([^\\/]+)(.*)$

的?在(?:http://)?末意味着位是可選的
([^\\/]+)捕獲並匹配任何不是一個\或/
(.*)抓住一切直到行結束

也許你更多的東西一樣 後^(?:https?://)([^\\/]+)(.*)$

不妨考慮完整的URL語法沿着

file://          /C:/temp/app/example.html 
file://  C        : /temp/app/example.html 
file://  C        : \temp\app\example.html 
http://[email protected]:8080/test/url.htm?view=smart 
[method][    server     ][ path ][optional] 
     [user][   domain    ][port] 

那麼你的小時線eading更多像

([a-zA-Z][a-zA-Z0-9\\+\\-\\.]*://)?(([^@/\\\\][email protected])?([a-zA-Z0-9_'!~\\-,;&=\\.\\$\\*\\(\\)\\+]+)(:\\d*)?)?([/\\\\][^?]*)?(\\?.*)? 
2

http://不匹配,但它是可選的,所以這沒問題; 「一個或多個不是斜槓的字符」匹配httpasd:,當然.*匹配後面的所有內容,從斜線(包括)開始。這與任何常見的正則表達式實現都是一樣的,沒有任何C++特有的!

+0

正則表達式u能告訴我,我怎麼能說得對正則表達式 – raj 2010-09-03 20:56:01

+0

@raj,這完全取決於_what_你想匹配,並且你想什麼** **不匹配。我很高興@Greg能夠推測這一點(我從你的接受中推斷出來),因爲我的思維閱讀能力有限;-)。 – 2010-09-03 21:28:10