【发布时间】:2010-09-16 14:48:09
【问题描述】:
假设我有 10,000 个正则表达式和一个字符串,我想找出字符串是否与其中任何一个匹配并获取所有匹配项。 最简单的方法是针对所有正则表达式逐一查询字符串。有没有更快、更有效的方法呢?
编辑: 我试过用 DFA (lex) 代替它 这里的问题是它只会给你一个单一的模式。如果我有一个字符串“hello”和模式“[H|h]ello”和“.{0,20}ello”,DFA 只会匹配其中一个,但我希望它们都命中。
【问题讨论】:
-
通常人们会尽量避免歧义,因此有一些标准可以在可能匹配的模式中进行选择。通常选择最长的最左边的匹配。如果你有这个需求,你可能不得不自己写一些东西
-
在回答相关问题时遇到了这个问题。由于这个问题是在 08 年提出的,因此我发布了一个开源 Java 库,您可以使用它来构建一个 DFA,如果您愿意,它会为您提供所有匹配的表达式:mtimmerm.github.io/dfalex