CPP + Regular Expression to Validate URL

后端 未结 2 383
你的背包
你的背包 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:21

    look at http://gskinner.com/RegExr/, there is a community tab on the right where you find contributed regex's. There is a URI category, not sure you'll find exactly what you need but this is a good start

    0 讨论(0)
  • 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 <regex>.

    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
    
    0 讨论(0)
提交回复
热议问题