2016-08-01 37 views
0

我有一大串文本,正在使用正則表達式來搜索特定的分隔字符串鍵。例如,我有興趣在文本中找到所有出現的[!v some_word]用表替換Ruby中的表達式匹配

我已經有正則表達式來查找事件。我想要做的是使用找到的"some_word"在數據庫中查找值,並用我找到的值替換整個事件"[!v some_word]"

有沒有辦法使用正則表達式來做到這一點?作爲一個... "some_word"可能沒有在數據庫中定義,在這種情況下,我想忽略匹配,只是離開它。

我的正則表達式是:

/(\[!v\s+([a-z\d_]+)\s*\])/ 

文本將包含類似:

This proposal is created for [!v client_name]. As such [!v client_name] maintains personal rights... 

該數據庫將包含由"client_name"其值可能是"Google"鍵入一個條目。因此,我希望能夠找到標記爲[!v...]的所有實例,確定密鑰(例如,client_name),然後用與該密鑰關聯的值替換[!v...]。您還可以假設可以通過某個關聯或甚至參數數組來查找該值。

+1

向我們展示你的代碼(正則表達式),用什麼在你的數據庫中沿樣品字符串(哪一個領域?對象?列?)。 – Anthony

回答

0

是的。使用String#gsubString#gsub!這種形式的塊。該塊將接收匹配數據作爲其參數。您可以將任意代碼放入執行數據庫查詢的塊中。該塊應該返回一個字符串,然後用它來替換匹配正則表達式的文本部分。中的g代表global,因此它將處理字符串的所有匹配部分,而不是第一個匹配的部分。

new_test = test.gsub(regex_pattern) do |match| 
    # do database query 
    # return a string 
end 
+0

我更新了我上面的原始問題以包含正則表達式。我似乎只在整個團隊中獲得整個團隊作爲其參數。 「鍵」總是顯示爲「全部」爲空,獲得[!v鍵]。 –

+0

噢,另一個提示是你可以使用像$ 1,$ 2和$ 3這樣的魔術變量來得到正則表達式中與括號相對應的字符串部分。也許這就是你在說的。 –

+0

是的,這是$ 1等,我錯過了。謝謝。 –

相關問題