【发布时间】:2016-05-17 13:08:14
【问题描述】:
我试图从包含大量特殊字符、空格和 url 的字符串中过滤掉 url。我曾尝试使用正则表达式,但它失败了,它有时会设法排列 url,但输出仍然包含特殊字符和空格,所以我在这里。最好的问候P
string str;
std::ifstream in("c:/Users/Petrus/Documents/History", std::ios::binary);
std::stringstream buffer;
if (!in.is_open()){
cout << "Failed to open" << endl;
}
else{
cout << "Opened OK" << endl;
}
buffer << in.rdbuf();
std::string contents(buffer.str());
std::ofstream out("urls.txt");
unsigned counter = 0;
std::regex word_regex(
R"(^(([^:\/?#]+):)?(//([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)",
std::regex::extended
);
auto words_begin = std::sregex_iterator(contents.begin(), contents.end(), word_regex);
auto words_end = std::sregex_iterator();
for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
std::smatch match = *i;
std::string match_str = match.str();
for (const auto& res : match) {
counter++;
std::cout << counter++ << ": " << res << std::endl;
}
std::cout << " " << match_str << '\n';
}
system("PAUSE");
return 0;
}
【问题讨论】:
-
根据数据文件的内容,您也许可以使用更简单的
regex。 -
几乎可以肯定,正则表达式是这里的最佳选择,但我们无法帮助您调试正则表达式,除非您能给出它不起作用的输入示例。
-
这是我尝试过滤的文件的开头。 url 链接在文件中。 pastebin.com/wA9N1Gbi