2014-10-08 137 views
2

我有一组正则表达式,我将它们存储在数据库的某个表中。我检索它们并使用这些正则表达式应用某些操作,但它们不能按需要工作。Ruby on Rails:无法从数据库检索正则表达式

junkremoveregex=[] 
    regexes = JunkRemoveLineRegex.find(:all,:select => 'regex') 

    regexes.each do |regex| 
     junkremoveregex << regex.regex 
    end 

    puts junkremoveregex 

    junktest=/note/ 

    junkremoveregexset=Regexp.union(junkremoveregex) 
    line ="note thhat yo yo honey singh".downcase 
    if(line.match(junkremoveregexset)) 
     puts "note was found in line" 
    else 
     puts "No line was found" 
    end 

该代码的输出是找不到行。

如果我用这个代码,那么它的工作完美

junkremoveregex=[] 
    regexes = JunkRemoveLineRegex.find(:all,:select => 'regex') 

    regexes.each do |regex| 
     junkremoveregex << regex.regex 
    end 

    puts junkremoveregex 

    junktest=/note/ 

    junkremoveregexset=Regexp.union(junktest) 
    line ="note thhat yo yo honey singh".downcase 
    if(line.match(junkremoveregexset)) 
     puts "note was found in line" 
    else 
     puts "No line was found" 
    end 

提出junkremoveregex给人/ NOTE/

这又如何解决?

+0

请出示JunkRemoveLineRegex.find的'内容' – 2014-10-08 10:27:59

+0

由于(:选择=>“正则表达式”:所有)我们需要看看你实际存储的正则表达式的含义。 – 2014-10-08 10:29:02

+0

把junkremoveregex给/ note /。我想我已经指定了这个问题本身 – LearningBasics 2014-10-08 10:30:25

回答

1

由于提到BroiSatse,你的正则表达式是字符串格式来了,你首先需要将其转换回正则表达式的格式。对于那些需要使用这个宝石http://rubygems.org/gems/to_regexp

"/note/".to_regexp 
#=> /note/ 

或在您的情况

junkremoveregexset.to_regexp 
+1

它工作了!!只是检查上面的解决方案,因为它不需要任何依赖 – LearningBasics 2014-10-08 10:50:22

0

如果它们被存储为字符串,你可能需要做的:

>> Regexp.new junkremoveregex 
+0

junkremoveregex是一个数组,'Regexp.new'不接受它作为参数。 – BroiSatse 2014-10-08 10:33:56

0

如果puts junkremoveregex打印/note/这意味着这是一个字符串`“/ NOTE /”。不要把这些作为斜线正则表达式语法 - 这是相当的正则表达式本身的一部分,所以你的正则表达式变成:

/\/note\// 

这显然不符合任何东西。 你需要修改你的模型不包括那些斜线。

除此之外,Regexp.union不会将字符串转换为正则表达式,因此您需要在合并条件之前执行此操作。我会写你这样的代码:

junkremoveregex = JunkRemoveLineRegex.pluck(:regex).map {|string| Regexp.new string } 

puts junkremoveregex 

junktest=/note/ 

junkremoveregexset=Regexp.union(junkremoveregex) 
line ="note thhat yo yo honey singh".downcase 
if(line.match(junkremoveregexset)) 
    puts "note was found in line" 
else 
    puts "No line was found" 
end 
+0

NoMethodError:未定义的方法'pluck'for#。这个错误被抛出!其实我是铁轨开发新手 – LearningBasics 2014-10-08 10:53:33

+0

@LearningBasics - 你使用哪个rails版本? – BroiSatse 2014-10-08 10:54:09

+0

rails版本是3.1.0 – LearningBasics 2014-10-08 10:56:41