const std::string schema_re = "([[:alpha:]]+:\\/\\/)";
const std::string user_pass_re = "(([^:\\s]+):([^@\\s]+)@)?";
const std::string host_port_re = "([[:alnum:].:-]+)";
+ const std::string vhost_re = "(/[[:print:]]+)?";
}
bool parse_url_authority(const std::string& url, std::string& host, std::string& user, std::string& password) {
- const std::string re = schema_re + user_pass_re + host_port_re;
+ const std::string re = schema_re + user_pass_re + host_port_re + vhost_re;
const std::regex url_regex(re, std::regex::icase);
std::smatch url_match_result;
if (std::regex_match(url, url_match_result, url_regex)) {
host = url_match_result[HOST_GROUP_IDX];
- user = url_match_result[USER_GROUP_IDX];
+ user = url_match_result[USER_GROUP_IDX];
password = url_match_result[PASSWORD_GROUP_IDX];
- return true;
+ return true;
}
return false;
}
bool parse_url_userinfo(const std::string& url, std::string& user, std::string& password) {
- const std::string re = schema_re + user_pass_re + host_port_re;
+ const std::string re = schema_re + user_pass_re + host_port_re + vhost_re;
const std::regex url_regex(re);
std::smatch url_match_result;
if (std::regex_match(url, url_match_result, url_regex)) {
- user = url_match_result[USER_GROUP_IDX];
+ user = url_match_result[USER_GROUP_IDX];
password = url_match_result[PASSWORD_GROUP_IDX];
- return true;
+ return true;
}
return false;