Koalablog

Rsgex: 基于NFA的正则表达式引擎实现

2025-07-02

Rsgex - Github

趁着摸鱼,顺便锻炼下 Rust,写了个简单的正则表达式引擎,支持以下这些功能:

  • test(): 类似 JavaScript 的 Regex.test(),返回 bool;
  • exec(): 类似 JavaScript 的 Regex.exec(),返回 HashMap,包含所有的捕获组。

实现包含这几个部分:

  • NFA: 生成并使用 BFS(广度优先搜索)来遍历自动机
  • Engine: 根据用户给出的 Pattern 生成对应的正则表达式 NFA,并运行
  • Matcher: 各类匹配器,用于 NFA 中的状态流转
  • Parser: 实际调用了 regex_syntax,直接将正则表达式转为对应的 AST,省去了 AST 解析的工作。