我有一个充满正则表达式键的 JSON 文件,其中包含基于发送的消息的响应(例如。你好,德拉根弗利尔!该文件包含如下值:
{
"/hello/i" : "Why hello there!",
"/how are you.*dragnflier/i" : "I'm good thank you! How are you?"
}
我在 ruby 程序开始时将它们加载到哈希中。有没有比使用所有键在其上运行循环更有效的方法来查看消息是否与哈希中的任何正则表达式匹配?我想获取键返回的值,而不是键列表或布尔值。
基于相反情况的其他答案,解决方案最终是:
val = myhash.keys.select {|key| message.to_s.match(key)}
是的,有更有效的方法:
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
正如你所料。