2015-03-30 54 views
0

爲了清理我的Rails項目的代碼,我將所有正則表達式字符串移動到MySQL。我如何將位於MySQL字段中的字符串添加到我的匹配方法中?這裏是我想要做的一個例子:在Rails項目中使用存儲在mysql字段中的regex字符串

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] 

如果我的問題不清楚,請讓我知道。 在此先感謝!

回答

0

您可以從字符串新的正則表達式這樣

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 

請注意兩件事。

  1. 爲了這個工作,你應該從數據庫中的正則表達式中刪除開始和結尾的斜槓。

存儲'[a-c] | [1,2,3]'而不是'/ [a-c] | [1,2,3] /'。

  1. 我不確定你爲什麼決定把所有正則表達式存儲在數據庫中,但它聽起來不是一個好主意。
+0

嗨Dabrorius,所有的正則表達式字符串已經存在,位於我的MySQL數據庫(StringDb)。我的問題是,我怎麼能真正使用我的db中的正則表達式字符串爲我的foo.match正則表達式。例如,假設我的代碼片段中的exp [1]是我的db中的一個字符串='/ [a-c] | [1,2,3] /'。我試圖把這個字符串放到我的正則表達式中。即。 foo.match(/ [a-c] | [1,2,3] /) – Cosi 2015-03-30 19:17:36

+0

你應該反過來使用它。你應該在正則表達式上調用匹配,然後在字符串中傳遞它。 /[a-c]|[1,2,3]/.match(foo)所以foo應該是一個字符串,你應該在正則表達式上調用匹配。 – Dabrorius 2015-03-30 19:33:15

+0

謝謝Dabrorius。你建議使用Regexp.new(exp [1])。match(「stringToMatch」)工作。我仍然不確定爲什麼我的方式不起作用,但我確定它在正則表達式/匹配文檔中。至於爲什麼我將所有的正則表達式字符串移動到MySQL數據庫,它爲我存儲的大約100個不同的正則表達式字符串在我的Rails應用程序中保存了大約300行代碼。 (幹我的瘋狂) – Cosi 2015-03-30 21:17:28

相關問題