2011-04-11 87 views
4

我想在驗證URL的C++ {MFC}中構建一個正則表達式。CPP +正則表達式驗證URL

正則表達式必須滿足以下條件。

有效網址: - http://cu-241.dell-tech.co.in/MyWebSite/ISAPIWEBSITE/Denypage.aspx/ http://www.google.com http://www.google.co.in

無效網址: -

  1. http://cu-241.dell-tech.co.in/ \ MyWebSite/\ ISAPIWEBSITE/\ Denypage.aspx/= Regx必須檢查&無效網址爲「/\MyWebSite/\ISAPIWEBSITE/\Denypage.aspx/」

  2. http://cu-241.dell-tech.co.in//////MyWebSite/ISAPIWEBSITE/Denypage.aspx/ = Regx必須檢查&由於url中有多個「///////」條目導致無效URL。

  3. http://news.google.co.in/%5Cnwshp?hl=en&tab=wn =正則表達式必須檢查&無效的URL用於額外插入%5C &%2F字符。

我們該如何開發一個滿足上述條件的通用正則表達式。 請幫助我們提供一個正則表達式,將處理CPP {MFC}中的上述場景

回答

0

請看http://gskinner.com/RegExr/,右側有一個社區選項卡,您可以在其中找到提供的正則表達式。有一個URI類別,不知道你會準確找到你需要的東西,但這是一個好的開始

9

您是否嘗試過使用RFC 3986建議?如果你有能力使用GCC-4.9,那麼你可以直接使用<regex>

它指出,與^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?你可以爲子匹配:

scheme = $2 
    authority = $4 
    path  = $5 
    query  = $7 
    fragment = $9 

例如:

int main(int argc, char *argv[]) 
{ 
    std::string url (argv[1]); 
    unsigned counter = 0; 

    std::regex url_regex (
    R"(^(([^:\/?#]+):)?(//([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)", 
    std::regex::extended 
); 
    std::smatch url_match_result; 

    std::cout << "Checking: " << url << std::endl; 

    if (std::regex_match(url, url_match_result, url_regex)) { 
    for (const auto& res : url_match_result) { 
     std::cout << counter++ << ": " << res << std::endl; 
    } 
    } else { 
    std::cerr << "Malformed url." << std::endl; 
    } 

    return EXIT_SUCCESS; 
} 

然後:

./url-matcher http://localhost.com/path\?hue\=br\#cool 

Checking: http://localhost.com/path?hue=br#cool 
0: http://localhost.com/path?hue=br#cool 
1: http: 
2: http 
3: //localhost.com 
4: localhost.com 
5: /path 
6: ?hue=br 
7: hue=br 
8: #cool 
9: cool 
+0

這是工作真的很棒。你能告訴我如何使用這個來提取字符串中的所有匹配的URL使用正則表達式嗎?我試圖用它與sregex_iterator一起使用,但我沒有得到任何匹配。非常感謝你! – Julius 2016-02-28 10:31:28

+2

Unforutnately這不是爲了驗證,而是爲了將正確的URI分解成它的部分。它甚至不會檢測最簡單的情況,如未編碼的空格。 – Lothar 2016-07-27 03:27:38

+0

感謝這樣一個有用的和解釋良好的答案。這是我發現的準確性,易用性和快速實施的最佳全方位網址分析腳本。而且你不需要下載任何特殊的庫!這將對這個問題做出很好的回答:https://stackoverflow.com/q/2616011/1043704 – 2017-09-30 03:19:42