当前位置: 首页 > 面试题库 >

大文件中的正则表达式搜索模式

文心思
2023-03-14
问题内容

我想在包含单行的超大文件(fe大于1
GB)中搜索模式。无法将其加载到内存中。目前,我使用BufferedReader读入缓冲区(1024个字符)。主要步骤:

  1. 将数据读入两个缓冲区
  2. 该缓冲区中的搜索模式
  3. 如果找到模式,则增加变量
  4. 将第二个缓冲区复制到第一个
  5. 将数据加载到第二个缓冲区
  6. 在两个缓冲区中搜索模式。
  7. 如果找到模式,则增加变量
  8. 重复上述步骤(从4开始),直到EOF

该算法(两个缓冲区)让我避免了将搜索到的文本按块分割的情况。除非模式结果小于两个缓冲区的长度,否则它的工作方式类似于chram。例如,当结果更长时,我无法处理大小写的情况-
假设只有3个缓冲区(但是我只有两个缓冲区中的数据,因此匹配将失败!)。而且,我可以实现这种情况:

  1. 准备1 GB的单行文件,其内容为“ baaaaaaa(....)aaaaab”
  2. 搜索模式ba*b
  3. 整个文件的匹配模式!
  4. 我不必打印结果,我只能说:“是的,我能够找到模式”或“否,我无法找到它”。

Java有可能吗?我的意思是:

  1. 能够确定文件中是否存在模式(无需将整行加载到内存中,请参见上面的情况)
  2. 当匹配结果比块长时,找到处理情况的方法。

我希望我的解释很清楚。


问题答案:

我认为您的解决方案是将其实现CharSequence为非常大的文本文件的包装。

为什么?因为Matcher从a 构建a Pattern需要一个CharSequence参数。

当然,说起来容易做起来难……但是然后您只有三种方法可以实现,所以这应该不会太难…

编辑 我大吃一顿,吃了自己的狗粮。“最糟糕的部分”是它确实有效!



 类似资料:
  • 问题内容: 我需要找到与特定正则表达式匹配的所有软件包: 基本上,包的名字应该与启动,并有后话。例如,以下软件包应匹配: 我可以做,但是有很多我不感兴趣的软件包。 是否提供通过正则表达式查找软件包的方法?或者,我应该只是通过管道传递结果来过滤掉无关的包? 此外,可能是一个的“交集” ,并有助于太。 问题答案: alecxe,我相信这是您要寻找的一线客。 如下面评论中铬酸盐所建议的那样,您可以根据需

  • 问题内容: 我需要在给定正则表达式的字符串中找到所有匹配项。我一直在这样做,直到遇到一个案例,它没有达到我的预期。例如: 在这种情况下,返回我需要的内容(最长的匹配项),但是行为却有所不同,尽管文档暗示它应该是相同的: 匹配所有出现的模式,而不仅仅是第一个。 为什么行为不同? 如何获得with (或其他方式)的结果? 问题答案: 好的,我从文档中查看发生了什么…… 如果该模式中存在一个或多个组,则

  • 我的正则律很糟糕。我想建立一个智能搜索,在那里我可以给搜索引擎提示在哪个属性上搜索什么。 类似这样: 搜索输入:位置:伦敦 - 搜索输入:位置:纽约伦敦 - 搜索输入:位置:伦敦标签:栏 - - 搜索输入:地点:伦敦,纽约标签:酒吧,俱乐部 - - 我想知道正则表达式应该如何解析这样的用户输入?

  • 我有: 使用正则表达式我想搜索并返回:

  • 本文向大家介绍go语言文件正则表达式搜索功能示例,包括了go语言文件正则表达式搜索功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言文件正则表达式搜索功能。分享给大家供大家参考,具体如下: PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用: JavaScript正则表达式在线测试工具: http://tools.jb51.net/regex/javascrip