【问题标题】:test RegExp on large number of strings在大量字符串上测试 RegExp
【发布时间】:2014-06-26 21:59:55
【问题描述】:

我有很多字符串(可能大约 50k-1M,所有字符串都不太长,可能 1-20 个字符)。现在我得到任何正则表达式,我需要返回所有匹配字符串的列表/迭代器。这必须尽可能快。

有什么好的索引结构可以做到这一点?

目前,我正在字符串的字符上构建一棵树。我将 RegExp 转换为确定性自动机。然后我计算该自动机与树的交集。这看起来是一种快速的方法,但我想知道其他可能性。

一个额外的挑战是支持 Unicode/UTF8,但我现在不想把这个问题集中在那个位上。

【问题讨论】:

  • 您尝试/可以使用什么操作系统和语言?
  • @rob:我主要是在这里询问算法/数据结构,所以这无关紧要。但是,我是用 C++ 编写的。
  • 这取决于需要多久查找一次字符串列表以及需要多久添加一次。在以前的工作中,他们有一个类似的项目,字符串很少更改并且经常阅读。在这种情况下,使用并遍历字符图以到达适当的端点。它在旧系统上带来了相当大的加速(我不记得具体的图形结构,我只记得他们使用的是c++ boost 库。祝你好运。
  • @MikeH-R:它们是迭代添加的,应该可以在合理的时间内将新的添加到列表中,但是,查询速度要快得多。所以我想和你的情况类似。

标签: regex search match automaton


【解决方案1】:

我刚刚发现codesearch project 似乎已经实现了这一点。解释在这里:Regular Expression Matching with a Trigram Index

另一篇相关文章可能是这样的:Regular Expression Matching Can Be Simple And Fast

(我还没有真正进一步调查。我稍后会扩展这个答案。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2015-09-22
    相关资源
    最近更新 更多