从一组单词匹配

时间:2016-05-14 17:05:48

标签: ruby regex

def has_word?
  text =~ /((Word1)|(Word2))/
end

这就是我现在所做的,它有效,但我觉得有更好的红宝石解决方案。什么是正确的方法?

1 个答案:

答案 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"])