一尘不染

针对多个正则表达式有效地查询一个字符串

algorithm

可以说我有10,000个正则表达式和一个字符串,我想找出该字符串是否与它们中的任何一个匹配并获取所有匹配项。这样做的简单方法是仅针对所有正则表达式一一查询字符串。有更快,更有效的方法吗?

编辑:我尝试用DFA(lex)代替它。这里的问题是,它只会给您一个单一的模式。如果我有一个字符串“ hello”和模式“ [H | h]
ello”和“。{0,20} ello”,则DFA仅会匹配其中之一,但我希望它们都匹配。


阅读 252

收藏
2020-07-28

共1个答案

一尘不染

Martin
Sulzmann
在这一领域已经做了很多工作。他有一个HackageDB项目,在这里对此进行了简要说明其中似乎使用了偏导数

使用的语言是Haskell,因此,如果需要的话,很难将其翻译为非功能性语言(我认为翻译成许多其他FP语言仍然很困难)。

该代码不是基于转换为一系列自动机,然后将它们组合在一起,而是基于对正则表达式本身的符号操作。

此外,该代码还具有很大的实验性,马丁不再是教授,而是处于“有酬就业”(1)中,因此可能没有兴趣/无法提供任何帮助或投入。


  1. 这是个玩笑-我喜欢教授,聪明的人越努力工作,获得报酬的机会就越大!
2020-07-28