我有一个非常大的文本文件(多达几百MB),我想使用STL正则表达式进行处理。我要查找的匹配区域跨越多行,在文件中至少出现了几千次。
我可以使用流迭代器来实现吗?我尝试过 std::istream_iterator<char>
,但是没有成功。能否提供一个最小工作示例?
请注意,我正在寻找仅涉及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';
}
}
istreambuf_iterator
也只是一个输入迭代器。 - Konrad Rudolphmain
函数,例如尝试使用std::istream_iterator
。这将有助于确保其他人正确理解您的问题。 - hydestd::regex_match
的匹配结果已经是一个序列了。 - 9dan