在 C# 中,如何使用正则表达式扫描非常大的文件——或者是否可以一次向正则表达式提供一个字符?
In c#, how to scan very large files with a regex - or is it possible to feed a regex one char at a time?
我正在构建一个工具来扫描许多任意大文件中的正则表达式模式。
我将同时对多个文件并行执行此操作,因此我想避免将整个文件加载到内存中,因为它们可以任意大。因此,我将使用内存映射文件和视图访问器对每个文件进行分块,然后扫描每个分块。
我的问题是:
如果匹配文本重叠两个块,如何确保不遗漏任何匹配项?
如果可以一次向 Regex 提供一个字符,然后在找到匹配项时触发事件,那么这可能会有所帮助。我可能仍然必须对允许的匹配大小设置一个最大值,但是可以使用 Regex 做到这一点吗?
如果您不允许跨行,您的缓冲区只需一行。
如果您确实允许跨行,那么您的缓冲区需要与您允许的最大回顾 + 允许的最长行一样大。
直接回答你的问题,你不能"one character at a time"因为整个搜索和目标字符串都需要存在才能进行比较。
我正在构建一个工具来扫描许多任意大文件中的正则表达式模式。
我将同时对多个文件并行执行此操作,因此我想避免将整个文件加载到内存中,因为它们可以任意大。因此,我将使用内存映射文件和视图访问器对每个文件进行分块,然后扫描每个分块。
我的问题是:
如果匹配文本重叠两个块,如何确保不遗漏任何匹配项?
如果可以一次向 Regex 提供一个字符,然后在找到匹配项时触发事件,那么这可能会有所帮助。我可能仍然必须对允许的匹配大小设置一个最大值,但是可以使用 Regex 做到这一点吗?
如果您不允许跨行,您的缓冲区只需一行。
如果您确实允许跨行,那么您的缓冲区需要与您允许的最大回顾 + 允许的最长行一样大。
直接回答你的问题,你不能"one character at a time"因为整个搜索和目标字符串都需要存在才能进行比较。