Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从字符串创建regexp而不加引号_Ruby_Regex_Literals - Fatal编程技术网

Ruby 从字符串创建regexp而不加引号

Ruby 从字符串创建regexp而不加引号,ruby,regex,literals,Ruby,Regex,Literals,我的代码将接收一个包含正则表达式字符串表示形式的参数。字符串可能类似于开头和结尾带有斜杠的“/whatever/”。给定一个字符串 str = "/^foo.*bar$/" 我想从这个字符串创建一个正则表达式 当我这样做时: pat = Regexp.new(str) # => /\/^foo.*bar$\// pat.match "foolishrebar" # => nil 所有特殊字符都被引用。我还不知道怎么不引用字符串 当我直接用/pattern/创建一个模式时,它工作得

我的代码将接收一个包含正则表达式字符串表示形式的参数。字符串可能类似于开头和结尾带有斜杠的
“/whatever/”
。给定一个字符串

str = "/^foo.*bar$/"
我想从这个字符串创建一个正则表达式

当我这样做时:

pat = Regexp.new(str)
# => /\/^foo.*bar$\//
pat.match "foolishrebar"
# => nil
所有特殊字符都被引用。我还不知道怎么不引用字符串

当我直接用
/pattern/
创建一个模式时,它工作得很好

pat = /^foo.*bar$/
pat.match "foolishrebar"
# => #<MatchData "foolishrebar">
pat=/^foo.*条$/
pat.匹配“愚蠢的钢筋”
# => #

使用
Regexp.new
时,不要以
/
开头和结尾字符串。只要让
str='^foo.*bar$'
。唯一被逃脱的是开头和结尾的斜杠;元字符很好。

此外,我可以使用str.tr(“/”,“”)在将字符串传递给Regexp.new之前删除字符串中的任何斜杠。作为旁白,您几乎总是希望
\A
\z
(字符串的开始/结束)而不是
^
$
(行的开始/结束)在Ruby中。如果你真的想要什么,那么你可以做
eval(str)
。但我并不是把它作为一个答案来发布,因为我知道周围有些愚蠢的人会在我发布这样一个答案后立即投反对票。
str = '^foo.*bar$'

r = /#{str}/
  #=> /^foo.*bar$/ 

"foolishly, the concrete guy didn't use rebar".match?(r)
  #=> true