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