2016-08-11 12 views
0

私はこの配列を持っています。 @stuff = ["pop", "corn", "apple", "banana"]複数の要素を配列内で使用できるようにする

@stuffに含まれている何かを動かすことができるようなメッセージを作りたいと思っていましたか?

if @msg =~ /#{@stuff}/i =>私はこの方法を行うことができますが、それは@stuff内の各単一の要素を行うには長い時間がかかるだろう何か

を行います。

if @msg =~ /(.*)/i 
    if $1.to_s == "pop" #do something 
    elsif $1.to_s == "corn" #do something 
    elsif $1.to_s == "apple" #do something 
    elsif $1.to_s == "banana" #do something 
    end 
end 

答えて

1

正規表現が達成していることは本当に不明です。あなたは、単にinclude?を使用して配列に値があるかどうかをテストすることができます

if @stuff.include?(msg) 
    #do something 
end 

あなたは、大文字と小文字を区別しない方法で比較したい場合は、小文字の文字列の両方に変換することができます:

if @stuff.map(&:downcase).include?(@msg.downcase) 

実際に正規表現を使用したい場合(この場合は使用しないでください)、|のアイテムに参加し、括弧で囲み、一連の "OR"マッチを含む正規表現を生成することができます。 。

/(#{@stuff.join('|')})/i =~ @msg 
+0

3番目のものは私が必要なものです - 恐ろしい!ありがとう! – Charles

+0

@Charlesこの場合も、正規表現を使用しないでください。 – meagar

関連する問題