Ruby正则表达式密钥搜索

http://ruby-doc.org/core-1.9.3/Hash.html#method-i-include-3F

可以将hash.has_key?(String)转换为具有正则表达式搜索function?

我建议使用新方法而不是替换has_key?来扩展Hash has_key?

 class Hash def has_rkey?(search) search = Regexp.new(search.to_s) unless search.is_a?(Regexp) !!keys.detect{ |key| key =~ search } end end 

这将使用字符串,符号或正则表达式作为参数。

 irb> h = {:test => 1} => {:test=>1} irb> h.has_rkey?(:te) => true irb> h.has_rkey?("te") => true irb> h.has_rkey?(/te/) => true irb> h.has_rkey?("foo") => false irb> h.has_rkey?(:foo) => false irb> h.has_rkey?(/foo/) => false 

如果你只对是/否答案感兴趣,那么any? 可能是个不错的选择:

 hash.keys.any? { |key| key.to_s.match(regexp)} 

其中regexp是正则表达式。

我认为使用any? 是一个很好的解决方案,如qqbenq所述,但我更喜欢使用它与grep因为它更简洁。 hash.keys.grep(/regexp/).any?

我不知道这个问题的绝对答案,但如果我为此写一个hacky方法,我会这样做

 !!hash.keys.detect{ |k| k.to_s =~ /Your_Regex_here/ } 

当任何键与正则表达式匹配时,这将返回true ,否则返回false