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

标签 regex algorithm pcre

假设我有 10,000 个正则表达式和一个字符串,我想找出该字符串是否与其中任何一个匹配并获得所有匹配项。 简单的方法是针对所有正则表达式一个一个地查询字符串。有没有更快、更有效的方法呢?

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

最佳答案

这就是词法分析器的工作方式。

正则表达式被转换为单个非确定性自动机 (NFA),并可能转换为确定性自动机 (DFA)。

生成的自动机将尝试一次匹配所有正则表达式,并将成功匹配其中一个。

这里有很多工具可以为您提供帮助,它们被称为“词法分析器生成器”,并且有适用于大多数语言的解决方案。

您没有说您使用的是哪种语言。对于 C 程序员,我建议看一下 re2c工具。当然是传统的(f)lex始终是一种选择。

关于regex - 针对多个正则表达式高效地查询一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/192957/

相关文章:

regex - PowerShell多字符串替换效率

python - 正则表达式匹配python中的外大括号

Python 正则表达式否定回顾

java - 无效的转义序列\d

ruby - Ruby 正则表达式中的递归嵌套匹配花括号对

algorithm - 如何找到图中最小生成树的数量?使用克鲁斯卡尔算法

c# - 如何减少文本中的多级大括号

algorithm - 分解出一个符号方程算法

php - 用于验证 ip-list 中的 ip-range 的正则表达式

regex - TRegex.Match 从不​​匹配空字符串