CPP + Regular Expression to Validate URL

后端 未结 2 384
你的背包
你的背包 2021-01-13 05:53

I want to build a regular expression in c++{MFC} which validates the URL.

The regular expression must satisfy following conditions.

Valid URL:- http://cu-241

2条回答
  •  醉梦人生
    2021-01-13 06:30

    Have you tried using the RFC 3986 suggestion? If you're capable of using GCC-4.9 then you can go directly with .

    It states that with ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? you can get as submatches:

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

    For example:

    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;
    }
    

    Then:

    ./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
    

提交回复
热议问题