多缓冲区上的c++正则表达式

C++ Regular expression on multiple buffers

本文关键字:c++ 正则表达式 缓冲区      更新时间:2023-10-16

我有一个问题与regex,我希望它计数多个(好吧,在这种情况下,一个)缓冲区作为一个字符串。

假设我下载了一个文件,我想搜索一个特定的字符串,比如"foobar"。我不知道文件的大小,我不想为html代码分配一大块几兆字节的缓冲区。

这个想法是,我有一个小缓冲区,假设64字节。假设我们写入该文件的一部分字符数组看起来像这样

.............foobar.............

一切看起来都很好,但是如果数组是这样的

.............................foo

在另一个写块时它变成

bar.............................

这个问题不言自明。Regex不会在单独的检查中找到字符串。我们可以分配大的缓冲区大小来一次包含页面,但这是一个巨大的浪费。

所以,我有一个想法-分割缓冲区。比如第一次写入时我们得到这些缓冲区

 ............................foo
 ------------------------------- // this one is empty

然后,第二次写入后,我们得到这个

 ............................foo
 bar............................

现在,如果有一个正则表达式函数可以把这些缓冲区算作一个缓冲区,那就太好了。我可以简单地保持缓冲区的交替,拉出我想要的字符串,而不需要在ram中分配大量空间。

是否有c++正则表达式库可以做到这一点?什么好主意吗?

std::regex_match(从c++ 11开始可用,参见标题<regex>)有一个接口,它接受一对迭代器来分隔要搜索的"字符串"。您可以创建自己的迭代器类,它将简单地按顺序迭代缓冲区集合。

每次更换缓冲区后,您都可以将缓冲区连接到临时缓冲区中,然后使用正则表达式进行搜索。ie。