假设我有 10,000 个正则表达式和一个字符串,我想找出该字符串是否与其中任何一个匹配并获得所有匹配项。 简单的方法是针对所有正则表达式一个一个地查询字符串。有没有更快、更有效的方法呢?
编辑: 我试过用 DFA (lex) 代替它 这里的问题是它只会给你一个单一的模式。如果我有一个字符串“hello”和模式“[H|h]ello”和“.{0,20}ello”,DFA 只会匹配其中一个,但我希望它们都命中。
最佳答案
这就是词法分析器的工作方式。
正则表达式被转换为单个非确定性自动机 (NFA),并可能转换为确定性自动机 (DFA)。
生成的自动机将尝试一次匹配所有正则表达式,并将成功匹配其中一个。
这里有很多工具可以为您提供帮助,它们被称为“词法分析器生成器”,并且有适用于大多数语言的解决方案。
关于regex - 针对多个正则表达式高效地查询一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/192957/