2016-05-14 57 views
1
def has_word? 
    text =~ /((Word1)|(Word2))/ 
end 

这就是我现在做的,它的工作原理,但我觉得有一个更好的红宝石解决方案。什么是正确的方法来做到这一点?匹配一组字

+1

为什么所有的括号匹配最长的单词? '/ Word1 | Word2 /'(或'/(Word1 | Word2)/'如果你需要捕捉这个单词)将是等同的。 –

+0

这个解决方案对你来说似乎有问题吗?该代码很容易阅读,并且表现相当好(假设没有病理输入)。你想改善什么? –

回答

1

您可能有一些特殊情况需要解决,但这些情况并未被当前的方法所覆盖。下面是这些类型的

比赛的一些常见的解决方案,无论情况

/Word1|Word2/i 

避免在字

/\b(Word1|Word2)\b/ 

仅匹配确切字符串中间找到一个匹配

/^(Word1|Word2)$/ 

匹配字符串的变量列表

def get_match(strings) 
    Regexp.new(strings.join("|")) 
end 

get_match(["Words", "word", "terrible", "one-way", "don't"]) 
get_match(["week", "month", "year"]) 

前短

def get_match(strings) 
    Regexp.new(strings.sort.reverse.join("|")) 
end 

get_match(["Yes", "Day", "Yesterday", "Daytime"]) 
+0

@appleLover这是否回答你的问题?如果是这样,请点击答案旁边的复选标记以接受它。复选标记将变绿。 Upvotes也是受欢迎的! –