我正在尝试用正则表达式解析一个URL,我在下面创建了正则表达式:
std::regex r("https?://[0-9a-zA-Z.]+(:([0-9]+))?.*", std::regex_constants::extended);
(我正试图从网址中删除端口)
我似乎无法匹配任何网址,但正则表达式适用于任何网址的几个在线正则表达式测试人员。作为测试,我创建了一些更简单的代码来检查,我无法匹配。
#include <regex>
#include <string>
#include <iostream>
int main() {
std::string str = "http";
std::smatch match;
std::regex regex("https?");
if(regex_match(str, match, regex)) {
std::cout << "Match" << std::endl;
}else {
std::cout << "No Match" << std::endl;
}
return 0;
}
编译并运行它会产生“No Match”,我不知道为什么。我最初用红宝石倾斜regexp,所以我可能会误解,但这似乎应该匹配。将正则表达式更改为“http”使其匹配,但我觉得“https?”应该匹配“http”,因为问号意味着在它之前可以有0或1个字符。
我真的很感激这里的一些帮助。我看了一堆关于c ++正则表达式的文档,我似乎无法想出这个。我不得不错过一些小细节。
任何帮助都会很棒。
由于