如果您寻求一般解决方案,则算法将需要如下所示:
- 将流的一部分读取到缓冲区中。
- 在缓冲区中搜索正则表达式
- 如果模式匹配,则对匹配项做任何想做的事情,丢弃缓冲区的开头直到
match.end()
第2步。 - 如果模式不匹配,请使用流中的更多数据扩展缓冲区
如果找不到匹配项,最终可能会占用大量内存,但是在一般情况下很难做到更好(考虑
.*x在大型文件中尝试将其作为多行正则表达式进行匹配,唯一的
x是最后一个字符)。
如果您了解更多有关正则表达式的信息,则可能还有其他情况可以丢弃部分缓冲区。

如果您寻求一般解决方案,则算法将需要如下所示:
match.end()第2步。
如果找不到匹配项,最终可能会占用大量内存,但是在一般情况下很难做到更好(考虑
.*x在大型文件中尝试将其作为多行正则表达式进行匹配,唯一的
x是最后一个字符)。
如果您了解更多有关正则表达式的信息,则可能还有其他情况可以丢弃部分缓冲区。