長い文字列変数があり、2つの部分文字列のいずれかが含まれているかどうかを確認したい。
例えば.
haystack = 'this one is pretty long'
needle1 = 'whatever'
needle2 = 'pretty'
今、私はRubyで動作しないこのような分離を必要とします:
if haystack.include? needle1 || haystack.include? needle2
puts "needle found within haystack"
end
式で括弧を試してください:
haystack.include?(needle1) || haystack.include?(needle2)
[needle1, needle2].any? { |needle| haystack.include? needle }
Ruby 2.4の場合、|
(または)を使用して正規表現の一致を行うことができます。
if haystack.match? /whatever|pretty|something/
…
end
または、文字列が配列内にある場合:
if haystack.match? Regex.union(strings)
…
end
(Ruby <2.4の場合、.match
を疑問符なしで使用します。)
_(haystack.split & [needle1, needle2]).any?
_
区切り文字としてコンマを使用するには:split(',')
検索する部分文字列の配列についてはお勧めします
needles = ["whatever", "pretty"]
if haystack.match(Regexp.union(needles))
...
end
2つの部分文字列のうち少なくとも1つが含まれているかどうかを確認するには:
haystack[/whatever|pretty/]
最初に見つかった結果を返します
私は、配列内の複数の部分文字列を検索する簡単な方法を見つけようとしていましたが、その下にも質問に答えます。多くのオタクが他の答えを考慮し、受け入れられたものだけではないことを知っているので、答えを追加しました。
haystack.select { |str| str.include?(needle1) || str.include?(needle2) }
部分的に検索する場合:
haystack.select { |str| str.include?('wat') || str.include?('pre') }