Hasty Briefsbeta

双语

Fast(er) regular expression engines in Ruby

a year ago
  • #benchmark
  • #regex
  • #performance
  • SerpApi在从现代网站提取数据时面临挑战,有时不得不使用正则表达式,尽管可能存在延迟问题。
  • Ruby的默认正则引擎Onigmo在扫描时间上存在弱点,促使人们探索替代方案,如re2、rust/regex和pcre2。
  • re2由谷歌开发,能抵抗ReDoS攻击且有维护良好的Ruby绑定,但在处理Unicode文本时表现不佳。
  • rust/regex整体速度最快,尤其擅长Unicode文本,但缺乏即用型Ruby绑定,且在正则集功能上存在局限。
  • pcre2被众多产品广泛采用,但其Ruby绑定过时且缺乏JIT支持,导致在对比中可行性较低。
  • 基准测试显示rust/regex在多数场景下优于re2和Ruby,特别是处理Unicode文本和复杂模式时。
  • re2在ASCII文本和有界重复模式中表现良好,但在Unicode感知匹配器和高最大边界条件下表现欠佳。
  • rust/regex的集合功能可能比顺序正则表达式慢,除非精心优化,这凸显了全面测试的必要性。
  • re2和rust/regex都能处理无效的UTF-8字节序列,而Ruby遇到此类输入时会失败。
  • 最终结论倾向于rust/regex的整体性能和Unicode支持,而re2更适合ASCII文本和抗ReDoS攻击场景。