趁着摸鱼,顺便锻炼下 Rust,写了个简单的正则表达式引擎,支持以下这些功能:
test()
: 类似 JavaScript 的 Regex.test(),返回 bool;exec()
: 类似 JavaScript 的 Regex.exec(),返回 HashMap,包含所有的捕获组。
实现包含这几个部分:
- NFA: 生成并使用 BFS(广度优先搜索)来遍历自动机
- Engine: 根据用户给出的 Pattern 生成对应的正则表达式 NFA,并运行
- Matcher: 各类匹配器,用于 NFA 中的状态流转
- Parser: 实际调用了
regex_syntax
,直接将正则表达式转为对应的 AST,省去了 AST 解析的工作。