我有一个非常大的文本文件(最多几百MB)我想用STL正则表达式处理。我正在寻找的匹配区域跨越几行,并在文件中至少发生几千次。
我可以为此目的使用流迭代器吗?我尝试过std :: istream_iterator,但没有运气。可以发布一个最小的工作示例吗?
请注意,我正在寻找仅涉及STL的解决方案。在完美的解决方案中,我想迭代所有比赛。
修改
一旦我阅读了评论,我就明白这是不可能的。所以也许有另一种方法可以在大文本文件中迭代正则表达式匹配:
#include <regex>
#include <iostream>
#include <string>
const std::string s = R"(Quick brown fox
jumps over
several lines)"; // At least 200MB of multiline text here
int main(int argc,char* argv[]) {
std::regex find_jumping_fox("(Quick(?:.|\\n)+?jump\\S*?)");
auto it = std::sregex_iterator(s.begin(), s.end(), find_jumping_fox);
for (std::sregex_iterator i = it; i != std::sregex_iterator(); ++i) {
std::smatch match = *i;
std::string match_str = match.str();
std::cout << match_str << '\n';
}
}
答案 0 :(得分:0)
您无法在视频流上进行匹配,导致匹配失败意味着什么?正则表达式的开头是否已匹配,并且需要输入更多字符,或者流中没有任何部分匹配。
但是在您进行编辑后,我们可以找到字符串的偏移量和匹配范围。您将要使用:
const vector<smatch> foo = { sregex_iterator(cbegin(s), cend(s), find_jumping_fox), sregex_iterator() }