8

正規表現パターンとして文字列を含むgrepを使用したいと思います。どうやってやるの?

例:

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

しかし、私は最初に私の声明を準備したい

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

どうすればこれを達成できますか?文字列を準備する必要があります。これは検索アルゴリズムに入り、リクエストごとにクエリが変更されるためです。ありがとう。

4

5 に答える 5

12

正規表現は、文字列と同じように補間をサポートします。

var = "hello"
re = /#{var}/i
p re #=> /hello/i
于 2012-05-10T13:17:55.200 に答える
4

引用符で囲むことは、それ自体と同じではありません。/a/iは正規表現、"/a/i"は文字列です。文字列から正規表現を作成するには、次のようにします。

r = Regexp.new str
myArray.grep(r)
于 2012-05-10T12:18:02.587 に答える
1

これを試して:

searchString = /asd/i
myArray.grep(searchString)
于 2012-05-10T12:16:04.770 に答える
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))

以下の私の古い答え:

ケースにするか、感度の低い検索をオンまたはオフにする場合はステートメントを渡すかなどを試してください

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
于 2016-08-07T18:02:14.507 に答える
0

'/ 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

あなたが探しているものです。

しかし、私は初心者であり、これについて間違っているかもしれませんが、全体として、単純に「文字列を正規表現パターンとして使用する」ことはできないと思います。

于 2018-01-26T19:21:02.333 に答える