如何优化检测输入字符串匹配列表中的哪个正则表达式?
正则表达式列表的高效匹配工具需求
背景说明
现有一组正则表达式示例如下:
File ".*" not foundOut of memoryYou do not have permission to perform this actionNetwork connection to [^ ]* failedUnrecognized command: .*
实际场景中该列表约包含100项,且会定期新增内容。
核心需求
给定输入字符串,需以最快速度(如最小最坏情况运行时,也可接受其他效率衡量标准及近似保证)判断其是否匹配列表中的某一项:
- 若匹配,返回对应正则表达式的索引(允许多匹配时返回任意匹配项索引,也可要求列表内正则表达式互斥)
- 若不匹配,返回
NO_MATCH标识
无性能优化的基础实现
不考虑性能时,可采用遍历匹配的方式实现,伪代码如下:
for(int i = 0; i < expressions.length; i++) { if(expressions[i].matches(input)) { return i; } } return NO_MATCH;
示例优化方案
针对部分正则列表,可采用基于前缀分支的优化方案,比如根据首字符分流匹配,伪代码如下:
switch(input[0]) { case 'F': return expression[0].match(input) ? 0 : NO_MATCH; case 'O': return expression[1].match(input) ? 1 : NO_MATCH; // ... 其他首字符对应的分支逻辑 }
但这类方案仅适用于特定结构的正则列表,不具备通用性。
工具开发需求
需要实现一个工具:输入上述正则表达式列表后,自动输出用于检测输入匹配项的优化算法代码/逻辑。
该问题与词法分析器/解析器生成、正则表达式前缀树(regex tries)、识别正则语言的状态机构建等技术场景类似,但目前未找到可直接复用的工具满足需求。
内容的提问来源于stack exchange,提问作者Daniel McLaury
相关产品推荐
相关产品推荐

