我想使用带字符串的grep作为正则表达式模式。我怎么能这样做?
示例:
myArray.grep(/asd/i) #Works perfectly.
但我想先准备好我的陈述
searchString = '/asd/i'
myArray.grep(searchString) # Fails
我怎样才能做到这一点?我需要准备一个字符串,因为这将进入搜索算法,并且查询将在每个请求上发生变化。 感谢。
答案 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
是您正在寻找的。 p>
但总的来说,我不认为你可以简单地“使用字符串作为正则表达式”,虽然我是初学者,但可能是错误的。