在 c# 中,如何使用 或者是否可以一次输入一个正则表达式字符扫描非常大的文件?



我正在构建一个工具来扫描许多任意大尺寸文件中的正则表达式模式。

我将同时在多个文件上并行执行此操作,因此我想避免将整个文件加载到内存中,因为它们可能是任意大的。因此,我将使用内存映射文件和视图访问器对每个文件进行分块,然后扫描每个块。

我的问题是:

  1. 如果匹配的文本重叠两个块,如何确保不会错过任何匹配项?

  2. 如果正则表达式可以一次喂食一个字符,然后在找到匹配项时触发事件,那么这可能会有所帮助。我可能仍然需要对允许的匹配大小进行最大限制,但是可以使用正则表达式做到这一点吗?

如果不允许跨行,则缓冲区只需要一行长。

如果确实允许跨线,则缓冲区的大小需要与允许的最大回溯 + 允许的最长行一样大。

在直接回答您的问题时,您不能"一次一个字符",因为需要存在整个搜索和目标字符串才能进行比较。

相关内容

最新更新