代码之家  ›  专栏  ›  技术社区  ›  Jazz

将多个正则表达式合并为一个正则表达式

  •  7
  • Jazz  · 技术社区  · 16 年前

    我有几个正则表达式(实际上有几千个),我必须检查一个字符串是否与这些正则表达式中的任何一个匹配。它不是很有效,所以我想将所有这些正则表达式合并为一个正则表达式。

    例如,如果a具有这些正则表达式:

    • “Fo*bar”
    • 'fo*zip '
    • “扎普酒吧”

    我想买一些像“foo”(bar zip)zap*bar”的东西。

    是否有一些算法、库或工具可以做到这一点?

    4 回复  |  直到 16 年前
        1
  •  7
  •   Vlad Valceanu    16 年前

    您可以使用或连接正则表达式( | )(以及用于字符串开始/结束的锚定)。

    大多数优秀的regex库在从regex构建有限状态自动机之后对其进行优化。例如,PCRE就是这样做的。

    这一步通常会处理您的优化问题,也就是说,它们会应用您必须“手工”完成的大部分转换。

        2
  •  2
  •   lorenzog    16 年前

    理论上,正则表达式是一个(不确定的)有限状态自动机,因此它们可以合并并最小化。你可以看看 this 作为起点。

    不过,要小心,这可能不是最正确的答案。为什么要处理几千个正则表达式?我只知道这种东西的维护地狱。也许您应该考虑编写一个解析器和一个语法——这很容易做到(而且语法比regexps更强大)。

        3
  •  0
  •   hometoast    16 年前

    我无法想象,即使可能的话,生成的regex也会更有效率。

        4
  •  0
  •   me_and    16 年前

    我非常怀疑这一点,因为任何这样的工具都必须非常复杂,才能处理所有不同的方式来组合regex。

    但是,如果您拥有的正则表达式相对简单(例如在示例中),那么编写自己的正则表达式可能会有一些运气。

    推荐文章