使用存储在Rails项目mysql字段中的正则表达式字符串

使用存储在Rails项目mysql字段中的正则表达式字符串,mysql,ruby-on-rails,regex,Mysql,Ruby On Rails,Regex,为了清理Rails项目的代码,我将所有正则表达式字符串移动到MySQL。如何将MySQL字段中的字符串添加到match方法中?下面是我尝试做的一个例子: foobar = [] regular_ex = StringDb.pluck(:id, :regex) # :regex is a column that stores regex strings, ie. '/[a-c]|[1,2,3]/' regular_ex.each do |exp| if foo.match(exp[1])

为了清理Rails项目的代码,我将所有正则表达式字符串移动到MySQL。如何将MySQL字段中的字符串添加到match方法中?下面是我尝试做的一个例子:

foobar = []
regular_ex = StringDb.pluck(:id, :regex) 
# :regex is a column that stores regex strings, ie. '/[a-c]|[1,2,3]/'
regular_ex.each do |exp|
    if foo.match(exp[1])
        foobar << exp[0]
foobar=[]
正则表达式=StringDb.pull(:id,:regex)
#:regex是存储regex字符串的列,即'/[a-c]|[1,2,3]/'
常规的| ex.每个do | exp|
如果foo.match(exp[1])

foobar您可以从如下字符串创建新的正则表达式

Regexp.new str
或者使用正则表达式插值

%r{#{regex_string}}
那就意味着你会做类似的事情

foobar = []
regular_ex = StringDb.pluck(:id, :regex) 
# :regex is a column that stores regex strings, ie. '/[a-c]|[1,2,3]/'
regular_ex.each do |exp|
    if Regexp.new(exp).match("stringToMatch")
        # do something
请注意两件事

  • 为了实现这一点,您应该从数据库中的正则表达式中删除起始斜杠和尾随斜杠
  • 存储“[a-c]|[1,2,3]”,而不是“/[a-c]|[1,2,3]/”

  • 我不太清楚为什么您决定将所有正则表达式存储在数据库中,但这听起来不是一个好主意

  • 大家好,Dabrorius,所有的正则表达式字符串都已经存在,并且都位于我的MySQL数据库(StringDb)中。我的问题是如何在我的数据库中为foo.match regex实际使用regex字符串。例如,假设我的代码片段中的exp[1]在我的数据库中是一个字符串='/[a-c]|[1,2,3]/'。我正试着把那个字符串输入我的正则表达式。例如,foo.match(/[a-c]|[1,2,3]/)你应该反过来使用它。您应该在regex上调用match,然后在字符串中传递它/[a-c]|[1,2,3]/.match(foo)所以foo应该是一个字符串,你应该在正则表达式上调用match。谢谢Dabrorius。您关于使用Regexp.new(exp[1]).match(“stringToMatch”)的建议奏效了。我仍然不确定为什么我的方法不起作用,但我确定它在regex/match文档中。至于为什么我将所有正则表达式字符串都移动到MySQL数据库,它为我在Rails应用程序中保存了大约300行代码,用于我拥有的大约100个不同的正则表达式字符串。(对我来说是干性的疯狂)