带有字符串参数的Ruby grep

时间:2012-05-10 12:11:55

标签: ruby regex ruby-1.9

我想使用带字符串的grep作为正则表达式模式。我怎么能这样做?

示例:

myArray.grep(/asd/i) #Works perfectly.

但我想先准备好我的陈述

searchString = '/asd/i'
myArray.grep(searchString) # Fails

我怎样才能做到这一点?我需要准备一个字符串,因为这将进入搜索算法,并且查询将在每个请求上发生变化。 感谢。

5 个答案:

答案 0 :(得分:11)

正则表达式支持插值,就像字符串一样:

var = "hello"
re = /#{var}/i
p re #=> /hello/i

答案 1 :(得分:4)

用引号括起来与事物本身不一样。 /a/i是Regexp,"/a/i"是字符串。要从字符串构造Regexp,请执行以下操作:

r = Regexp.new str
myArray.grep(r)

答案 2 :(得分:1)

试试这个:

searchString = /asd/i
myArray.grep(searchString)

答案 3 :(得分:1)

编辑:

我找到了更好的方法

myString = "Hello World!"
puts "Hello World!"
puts "Enter word to search"
input_search = gets.chomp
puts "Search insensitive? y/n"

answer = gets.chomp

if answer == "y"
  ignore = "Regexp::IGNORECASE"
else
  ignore = false
end

puts myString.lines.grep(Regexp.new(input_search, ignore))

我的旧答案如下:

如果他们想要打开或关闭不敏感的搜索等,请尝试将其作为案例或if语句传递

myString = "Hello World!"
puts "Enter word to search"
input_search = gets.chomp
puts "Search insensitive? y/n"
case gets.chomp
  when "y"
    puts myString.lines.grep(Regexp.new(/#{input_search}/i))
  when "n"
    puts myString.lines.grep(Regexp.new(/#{input_search}/))
end

答案 4 :(得分:0)

'/ asd / i'是一个字符串。为什么不把它变成Regrexp?如果你需要从String转到Regexp,一种方法是创建一个新的Regexp对象:

>> re = Regexp.new('/asd/i')
=> /\/asd\/i/ 
>> re = Regexp.new("asd", "i")
=> /asd/i 

也许,

>> str = gets.chomp #user inputs 
=> "Hello World"
re = Regexp.new(str, "i")
=> /Hello World/i

是您正在寻找的。

但总的来说,我不认为你可以简单地“使用字符串作为正则表达式”,虽然我是初学者,但可能是错误的。