2012-02-29 1 views
2

Я просматриваю имя продукта, чтобы проверить, существует ли в нем определенная строка. Сейчас он работает для одной строки, но как я могу сканировать несколько строк? например я хотел бы, чтобы просканировать как яблоко и MicrosoftКак сканировать текст для нескольких строк?

product.name.downcase.scan(/apple/) 

Если строка обнаружена я получаю [ «яблоко»] если нет, то он возвращает ноль []

ответ

5

Вы можете использовать regex alternation:

product.name.downcase.scan(/apple|microsoft/) 

Если вам нужно знать, содержит ли строка какую-либо из указанных строк, лучше использовать одно совпадение =~ вместо scan.

str = 'microsoft, apple and microsoft once again' 

res = str.scan /apple|microsoft/ # => res = ["microsoft", "apple", "microsoft"] 
# do smth with res 

# or 
if str =~ /apple|microsoft/ 
    # do smth 
end 
+0

удивительным, я ценю это! – ahuang7

2

Вы также можете пропустить регулярные выражения в целом:

['apple', 'pear', 'orange'].any?{|s| product.name.downcase.match(s)} 

или

['apple', 'pear', 'orange'].any?{|s| product.name.downcase[s]} 
Смежные вопросы