- /*
 - * MIT License
 - *
 - * Copyright (c) 2024 Roland Mainz <roland.mainz@nrubsig.org>
 - *
 - * Permission is hereby granted, free of charge, to any person obtaining a copy
 - * of this software and associated documentation files (the "Software"), to deal
 - * in the Software without restriction, including without limitation the rights
 - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 - * copies of the Software, and to permit persons to whom the Software is
 - * furnished to do so, subject to the following conditions:
 - *
 - * The above copyright notice and this permission notice shall be included in all
 - * copies or substantial portions of the Software.
 - *
 - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 - * SOFTWARE.
 - */
 - /*
 - * cppregexurlparser1.cpp - regex URL parer
 - */
 - #include <regex>
 - #include <iostream>
 - #include <stdlib.h>
 - int main(int ac, char *av[])
 - {
 - std::string Input {"myurl://foo:80/bar"};
 - /*
 - * MSVC:
 - * be aware of https://stackoverflow.com/questions/39645660/stdregex-to-match-begin-end-of-string
 - */
 - std::regex Pattern {
 - "^"
 - "(.+?)" // scheme
 - "://" // '://'
 - "(" // login
 - "(?:"
 - "(.+?)" // user (optional)
 - "(?::(.+))?" // password (optional)
 - "@"
 - ")?"
 - "(" // hostport
 - "(.+?)" // host
 - "(?::([[:digit:]]+))?" // port (optional)
 - ")"
 - ")"
 - "(?:/(.*?))?" // path (optional)
 - "$",
 - std::regex_constants::ECMAScript };
 - std::smatch Matches;
 - if (std::regex_search(Input, Matches,
 - Pattern)) {
 - std::cout << Matches.size()
 - << " submatches found!";
 - for (size_t i{0}; i < Matches.size(); ++i) {
 - std::cout << "\n\nSubmatch " << i << ": "
 - << Matches[i] << "\n Length: "
 - << Matches[i].length()
 - << "\n First Character: "
 - << *Matches[i].first
 - << "\n Position: "
 - << Matches.position(i) << std::endl;
 - }
 - }
 - return EXIT_SUCCESS;
 - }
 
cppregexurlparser1.cpp - regex URL parser
Posted by Anonymous on Wed 24th Jan 2024 09:33
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.
 nrubsig.kpaste.net RSS