正規表現パターンとして文字列を含むgrepを使用したいと思います。どうやってやるの?
例:
myArray.grep(/asd/i) #Works perfectly.
しかし、私は最初に私の声明を準備したい
searchString = '/asd/i'
myArray.grep(searchString) # Fails
どうすればこれを達成できますか?文字列を準備する必要があります。これは検索アルゴリズムに入り、リクエストごとにクエリが変更されるためです。ありがとう。
正規表現は、文字列と同じように補間をサポートします。
var = "hello"
re = /#{var}/i
p re #=> /hello/i
引用符で囲むことは、それ自体と同じではありません。/a/iは正規表現、"/a/i"は文字列です。文字列から正規表現を作成するには、次のようにします。
r = Regexp.new str
myArray.grep(r)
これを試して:
searchString = /asd/i
myArray.grep(searchString)
編集:
私はより良い方法を見つけました
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))
以下の私の古い答え:
ケースにするか、感度の低い検索をオンまたはオフにする場合はステートメントを渡すかなどを試してください
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
'/ asd/i'は文字列です。それをRegrexpにしてみませんか?StringからRegexpに移行する必要がある場合、そのための1つの方法は、新しい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
あなたが探しているものです。
しかし、私は初心者であり、これについて間違っているかもしれませんが、全体として、単純に「文字列を正規表現パターンとして使用する」ことはできないと思います。