2012-03-30 23 views
2

如何在'49'將是未知ID時使用ruby on rails來查找並替換'49'?Ruby正則表達式查找並替換字符串中的數字

str = "select * from clients where client_id = 49 order by registration_date asc" 
str = str.gsub(/someRegExThatFinds49/, replacement_id) # <------ Here's the concept 

尋找一個正確的語法和示例。謝謝。

+1

回答更大的問題,你爲什麼要在rails中編輯sql字符串?你很少需要在rails中觸摸sql。你想解決什麼大問題? – DGM 2012-03-30 18:13:29

+1

警告一句話 - 我在這裏看到的所有答案都是使用'gsub',它將替換字符串中正則表達式的_all_事件。如果您知道您的數字ID始終是字符串中的第一個數字,則常規「sub」將更安全,因爲它只替換第一個匹配項。如果您的身份證可能位於任何位置,可能還有其他數字,則可能不是您要查找的。這太容易搞砸了。 – 2012-03-30 18:20:03

+0

DGM,每個客戶端都在創建自定義報告,「str」由客戶端動態構建並作爲字符串存儲在數據庫中。因此,數據庫表'report'在'report_details'中包含數百個關聯記錄,其中包含這些sql查詢。我對軌道相當陌生,在某些情況下需要操縱這些記錄,並且由於我對軌道的瞭解而採取了這種方法。 – iamtoc 2012-03-30 18:24:51

回答

2

這會工作,使用該字符串的一個副本:

new_str = str.gsub(/\d+/, replacement_id) 

或者,如果你喜歡做它在的地方(直接修改字符串)

str.gsub!(/\d+/, replacement_id) 

伊恩。

-2
str = str.gsub(/49/, replacement_id) 

或者使用自動更新的版本:

str.gsub!(/49/, replacement_id) 

此外,檢查出Rubular它允許你來測試正則表達式。

+1

不好意思,但問題的關鍵是要替換_arbitrary_數字ID。 – 2012-03-30 18:11:26

1
unknown_id = 49 
puts "hello4849gone".gsub(/#{unknown_id}/, "HERE") #=> hello48HEREgone