2014-05-16 286 views

回答

12

是的,如下:

if %w(string1 string2 string3).any? { |s| my_string.include? s } 
    # your code 
end 

下面是文檔:Enumerable#any?

越過集合的每個元素給定塊。如果該塊返回的值不是false或nil,則該方法返回true。如果沒有給出塊,Ruby會添加一個隱含塊{ |obj| obj },這會導致任何?如果至少有一個收集成員不是falsenil,則返回true。

這裏是另一種方式(更最快):

[13] pry(main)> ary = %w(string1 string2 string3) 
=> ["string1", "string2", "string3"] 
[14] pry(main)> Regexp.union(ary) 
=> /string1|string2|string3/ 
[15] pry(main)> "abbcstring2"[Regexp.union(ary)] 
=> "string2" 
[16] pry(main)> "abbcstring"[Regexp.union(ary)] 
=> nil 

只要閱讀Regexp::unionstr[regexp] → new_str or nil

+2

哇!非常漂亮和精確:) – Pavan

+0

哦,這很好的解釋,謝謝。 – Kuroun

3

嗯,你總是可以使用正則表達式在這裏(冒着另一個JWZ報價:)

if mystring =~ /string1|string2|string3/ 
    ... 
end 
相關問題