Ответ 1
Попробуйте использовать parens в выражении:
haystack.include?(needle1) || haystack.include?(needle2)
У меня длинная строка-переменная и вы хотите узнать, содержит ли она одну из двух подстрок.
например.
haystack = 'this one is pretty long'
needle1 = 'whatever'
needle2 = 'pretty'
Теперь мне понадобится такая дизъюнкция, которая не работает в Ruby:
if haystack.include? needle1 || haystack.include? needle2
puts "needle found within haystack"
end
Попробуйте использовать parens в выражении:
haystack.include?(needle1) || haystack.include?(needle2)
[needle1, needle2].any? { |needle| haystack.include? needle }
(haystack.split & [needle1, needle2]).any?
Использование запятой в качестве разделителя: split(',')
Если Ruby 2.4, вы можете сделать регулярное выражение, используя |
(или же):
if haystack.match? /whatever|pretty|something/
…
end
Или, если ваши строки находятся в массиве:
if haystack.match? Regex.union(strings)
…
end
(Для Ruby <2.4 используйте .match
без знака вопроса.)
Для массива подстрок для поиска я бы рекомендовал
needles = ["whatever", "pretty"]
if haystack.match(Regexp.union(needles))
...
end
Чтобы проверить, содержит ли хотя бы одну из двух подстрок:
haystack[/whatever|pretty/]
Возвращает первый найденный результат
Я пытался найти простой способ поиска нескольких подстрок в массиве и в итоге ниже, который также отвечает на вопрос. Я добавил ответ, поскольку я знаю, что многие вундеркинды рассматривают другие ответы, а не только принятые.
haystack.select { |str| str.include?(needle1) || str.include?(needle2) }
и при поиске частично:
haystack.select { |str| str.include?('wat') || str.include?('pre') }