我需要使用 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)"
另一种选择是评估字段内容,因此我可以将纯表达式存储在 db 列中,然后执行eval(record.pattern)
以获得实际的正则表达式。这是有效的,因为我是唯一负责管理正则表达式记录的人,所以除了应用程序错误之外,这样做应该没有问题;-)
我还有其他选择吗?我宁愿不在 db 字段上执行 eval,但另一方面我不想使用我不知道的语法。