判断字符串是否与Ruby中的正则表达式匹配的最快方法是什么?

我的问题是,我必须通过一个庞大的字符串列表"egrep",找到哪些字符串与运行时给定的regexp匹配.I only care about whether the string matches the regexp, not where it matches, nor what the content of the matching groups is.我希望这个假设可以用来减少我的代码在匹配regexp上花费的时间.

我用

pattern = Regexp.new(ptx).freeze

我发现string =~ patternstring.match(pattern)稍微快一点.

有没有其他技巧或捷径可以让这个测试更快?

推荐答案

从Ruby 2.4.0开始,您可以使用RegExp#match?:

pattern.match?(string)

Regexp#match?release notes for 2.4.0中被明确列为性能增强,因为它避免了由其他方法(如Regexp#match=~)执行的对象分配:

Regexp#match?
Added Regexp#match?, which executes a regexp match without creating a back reference object and changing $~ to reduce object allocation.

Ruby相关问答推荐

为什么在if语句中的赋值操作不会在条件判断之前发生?

如何根据数组键对散列键进行排序?

每秒做某事 x 次

Ruby符号前面的-是什么意思?

RSpec 模拟对象示例

带有索引的 Ruby `each_with_object`

是否有Ruby单行如果 x 则返回?

按可能为 nil 的属性对对象的 ruby​​ 数组进行排序

如何合并散列数组以获取值数组的散列

object_id 分配如何工作?

无法正确自动生成 Ruby DevKit 配置文件

Jekyll - 找不到命令

如何获取符号链接的目标?

你能在 Python 的核心类型上修改补丁方法吗?

Ruby中block和&block的区别

是否有更简单的(单行)语法来别名一个类方法?

OpenSSL vs GPG 用于加密异地备份?

为什么在 ruby​​ 中动态创建大量符号不是一个好主意(对于 2.2 之前的版本)?

如何在 IRB 中重新加载脚本?

为依赖于环境变量的代码编写规范的最佳方法是什么?