如何将字符串转换为正则表达式

ram*_*ein 6 elixir

我有这个代码

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

这回来了0044.csv.

但是,我需要~r/(\d{4}.csv)/ 从数据库加载,所以我将其保存为

"~r/(\d{4}.csv)/"
Run Code Online (Sandbox Code Playgroud)

这是一个字符串.当我将它加载到变量时,它将是一个字符串.

我怎么能把它传递给Regex.scan

Gaz*_*ler 10

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

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

你需要一个额外的反斜杠来逃避,否则你最终会得到:

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