我正在尝试有效地提取静态字符串(必须匹配给定正则表达式才能匹配的字符串)。我已经能够在最简单的情况下做到这一点,但我正试图找到一个更强大的解决方案。
给定一个正则表达式,如下所示
"fox jump(ed|ing|s)"
会给我们
"fox,jumped,jumping,jumps"
另一个例子是
"fox jump(ed|ing|s)?"
这会给我们
"fox,jump"
因为可选运算符
我现在的算法过于简单。它将从正则表达式的末尾开始并删除组或单个字符,后跟这些运算符“*?” 以及“explode”分组的 OR 运算符“(|)”。这工作得很好,但没有考虑到正则表达式的完整语法。您可以将其视为正则表达式的最小集合生成过程(正则表达式可以“生成/必须匹配”的最小字符串集)。
为什么? 我正在尝试将一堆文本与大量正则表达式进行匹配。如果我可以获得这些“必需”的正则表达式的“关键字”列表,我可以对该关键字进行快速文本搜索以过滤我关心的正则表达式(忽略那些我保证不匹配甚至跳过该文本完全有效地不在文本上运行任何正则表达式,因为我们保证在我们的正则表达式集中没有匹配项)。我可以在一个有效的数据结构(Binary Search/Trie/Aho-Corasick)中组织这组关键字,以在我尝试通过有限自动机运行文本之前过滤这组正则表达式。在尝试运行正则表达式之前,我可以将一些非常快速的字符串匹配算法作为过滤阶段运行。我'