从字符串创建正则表达式而不引用

时间:2019-01-28 17:40:37

标签: ruby regex literals

我的代码将收到一个包含正则表达式的字符串表示形式的参数。字符串很可能像"/whatever/"一样,在开头和结尾都有斜杠。给定一个字符串,

str = "/^foo.*bar$/"

我想从该字符串创建一个正则表达式。

当我这样做时:

pat = Regexp.new(str)
# => /\/^foo.*bar$\//
pat.match "foolishrebar"
# => nil

所有特殊字符均被引用。我还没有弄清楚如何不引用字符串。

当我直接使用/pattern/创建模式时,它可以正常工作。

pat = /^foo.*bar$/
pat.match "foolishrebar"
# => #<MatchData "foolishrebar">

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

str = '^foo.*bar$'

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

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