2016-02-03 120 views
4

我有這樣的代碼如何字符串轉換爲正則表達式表達

reg=~r/(\d{4}.csv)/ 
raw="some craxy trashy text blabla 0044.csv" 
Regex.scan(reg,raw, capture: :all_but_first) 

這將返回0044.csv

不過,我需要從數據庫加載~r/(\d{4}.csv)/,所以我將它保存爲

"~r/(\d{4}.csv)/" 

這是一個字符串。當我將它加載到一個變量時,它將是一個字符串。

如何將它傳遞給Regex.scan

+1

我已經看到您的兩個問題,似乎您需要啓用大量可由用戶自定義的自定義數據轉換。你有沒有想過給他們一個他們可以使用的小編程語言,你可以安全地進行評估?我想通過[luerl](https://github.com/rvirding/luerl)嵌入Lua。 –

回答

7

您可以使用Regex.compile/2Regex.compile!/2

iex> Regex.compile("(\\d{4}.csv)")  
{:ok, ~r/(\d{4}.csv)/} 

您需要轉義一個額外的反斜槓,否則你將結束:

iex> Regex.compile("(\d{4}.csv)")  
{:ok, ~r/(\x7F{4}.csv)/}