如何查看字符串是否匹配ruby哈希中的任何正则表达式键

时间:2016-03-09 01:31:41

标签: ruby regex hash

我有一个充满正则表达式密钥的JSON文件,其响应基于发送的消息(例如,Hello,Dragnflier!)。该文件包含如下值:

{
  "/hello/i" : "Why hello there!", 
  "/how are you.*dragnflier/i" : "I'm good thank you! How are you?"
}

我在ruby程序的开头将它们加载到哈希中。是否有更有效的方法来查看消息是否与我的哈希中的任何正则表达式匹配,而不仅仅是使用所有键运行循环?我想得到键返回的值,而不是键列表或布尔值。

2 个答案:

答案 0 :(得分:6)

根据相反案例的其他答案,解决方案最终成为:

val = myhash.keys.select {|key| message.to_s.match(key)}

答案 1 :(得分:2)

是的,有更有效的方式:

hash = {
  /hello/i => "Why hello there!", 
  /how are you.*dragnflier/i => "I'm good thank you! How are you?"
}
message =~ Regexp.union(hash.keys)

您声明目标是检查“消息是否与我的哈希中的任何正则表达式匹配。”上述方法比您提出的解决方案更有效。

在完成初步检查后,可以做任何她想要检测相应密钥的任何内容(在我得到答案之后,这个问题出现在问题中。)这种方法比仅仅强制执行detect更有效。密钥。

请注意,您提供的答案不正确,因为

Regexp.new '/foo/i'

成为

#⇒ /\/foo\/i/i 

而不是

#⇒ /foo/i

正如你所预料的那样。