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

Jaz*_*azz 7 regex language-agnostic algorithm

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

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

  • 'foo*bar'
  • 'foo*zip'
  • 'zap*bar'

我想获得像'foo*(bar | zip)| zap*bar'这样的东西.

是否有一些算法,库或工具来做到这一点?

小智 7

您可以使用or(|)(以及字符串开头/结尾的锚点)连接正则表达式.

大多数优秀的正则表达式库在从正则表达式构建之后优化其有限状态自动机.例如,PCRE就是这么做的.

此步骤通常会处理您的优化问题,即.它们适用于你需要"手工"完成的大部分转换.