可以说我有10,000个正则表达式和一个字符串,我想找出该字符串是否与它们中的任何一个匹配并获取所有匹配项。这样做的简单方法是仅针对所有正则表达式一一查询字符串。有更快,更有效的方法吗?
编辑:我尝试用DFA(lex)代替它。这里的问题是,它只会给您一个单一的模式。如果我有一个字符串“ hello”和模式“ [H | h] ello”和“。{0,20} ello”,则DFA仅会匹配其中之一,但我希望它们都匹配。
Martin Sulzmann在这一领域已经做了很多工作。他有一个HackageDB项目,在这里对此进行了简要说明,其中似乎使用了偏导数。
使用的语言是Haskell,因此,如果需要的话,很难将其翻译为非功能性语言(我认为翻译成许多其他FP语言仍然很困难)。
该代码不是基于转换为一系列自动机,然后将它们组合在一起,而是基于对正则表达式本身的符号操作。
此外,该代码还具有很大的实验性,马丁不再是教授,而是处于“有酬就业”(1)中,因此可能没有兴趣/无法提供任何帮助或投入。