web-dev-qa-db-ja.com

文字列に複数の部分文字列のいずれかが含まれているかどうかを確認します

長い文字列変数があり、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
37
Hedge

式で括弧を試してください:

 haystack.include?(needle1) || haystack.include?(needle2)
45
lara
[needle1, needle2].any? { |needle| haystack.include? needle }
71
seph

Ruby 2.4の場合、|(または)を使用して正規表現の一致を行うことができます。

if haystack.match? /whatever|pretty|something/
  …
end

または、文字列が配列内にある場合:

if haystack.match? Regex.union(strings)
  …
end

(Ruby <2.4の場合、.matchを疑問符なしで使用します。)

11
emlai
_(haystack.split & [needle1, needle2]).any?
_

区切り文字としてコンマを使用するには:split(',')

10
rgtk

検索する部分文字列の配列についてはお勧めします

needles = ["whatever", "pretty"]

if haystack.match(Regexp.union(needles))
  ...
end
6
Seph Cordovano

2つの部分文字列のうち少なくとも1つが含まれているかどうかを確認するには:

haystack[/whatever|pretty/]

最初に見つかった結果を返します

3
Kapitula Alexey

私は、配列内の複数の部分文字列を検索する簡単な方法を見つけようとしていましたが、その下にも質問に答えます。多くのオタクが他の答えを考慮し、受け入れられたものだけではないことを知っているので、答えを追加しました。

haystack.select { |str| str.include?(needle1) || str.include?(needle2) }

部分的に検索する場合:

haystack.select { |str| str.include?('wat') || str.include?('pre') }
0
Shiko