在数据库中存储正则表达式

Fab*_*bio 2 regex activerecord eval ruby-on-rails

我需要使用 ActiveRecord 在数据库表中存储与其他字段相关的正则表达式。

我在 Regexp 类中找到了to_s方法,它指出

返回一个包含正则表达式及其选项的字符串(使用 (?opts:source) 表示法。这个字符串可以被反馈到 Regexp::new 到一个与原始语义相同的正则表达式。(但是,Regexp# == 在比较两者时可能不会返回 true,因为正则表达式本身的来源可能不同,如示例所示)Regexp#inspect 生成通常更易读的 rxp 版本。

所以这似乎是一个可行的解决方案,但它会用一种不寻常的语法存储 exp,为了让字符串存储我需要用/my-exp/.to_s. 此外,我可能无法直接编辑为正则表达式。例如一个简单的正则表达式产生:

/foo/i.to_s # => "(?i-mx:foo)" 
Run Code Online (Sandbox Code Playgroud)

另一个选项是评估字段内容,因此我可以将普通表达式存储在 db 列中,然后执行 aneval(record.pattern)以获取实际的正则表达式。这是有效的,因为我是唯一负责管理正则表达式记录的人,所以这样做应该没有问题,除了应用程序错误;-)

我还有其他选择吗?我不想在 db 字段上做 eval 但另一方面我不想使用我不知道的语法。

m_x*_*m_x 5

用于serialize按原样存储您的正则表达式

class Foo < ActiveRecord::Base
  serialize :my_regex, Regexp
end
Run Code Online (Sandbox Code Playgroud)

请参阅API 文档以了解更多信息。