为正则表达式填充Ruby哈希不能按预期工作

时间:2017-12-08 16:23:31

标签: ruby regex hash

我有这个数据的哈希:

{"ENABLED"=>
[#<Details:0x00007f910e946848
@context="ELP",
@instance="a1",
@side="blue",
@status="ENABLED",
@vm="ome-vm58",
@vmaddr="ajp://10.133.248.4:8009">,

... snip ...

#<Details:0x00007f910e944070
@context="learnItLive",
@instance="b2",
@side="green",
@status="ENABLED",
@vm="ome-vm61",
@vmaddr="ajp://10.133.248.7:8159">]}

哈希称为status_hash。我想确定密钥是否已启用。其他可能的键值是DISABLED,STOPPED和WAITING。

这些行:

puts "Status key: " + status_hash.keys.to_s
puts "1 - Cluster has Disabled, Stopped, or Waiting contexts" if status_hash.keys.grep(/^[DSW]/)

生成输出,即使键是“ENABLED”

Status key: ["ENABLED"]
1 - Cluster has Disabled, Stopped, or Waiting contexts

我不明白为什么当密钥中的第一个字符是E而不是DSW时正则表达式匹配。

2 个答案:

答案 0 :(得分:2)

Enumerable#grep总是返回一个数组,即使你的结果产生[],这在红宝石中也是真实的。

示例:

p 'hello world' if [].grep(/hi/).empty?
"hello world"
=> "hello world"
p 'hello world' if ![].grep(/hi/).empty?
=> nil

答案 1 :(得分:1)

尝试在.any?结果

上使用grep
puts "1 - Cluster has Disabled, Stopped, or Waiting contexts" if status_hash.keys.grep(/^[DSW]/).any?

为什么问题发生的原因是grep返回空数组[],这被认为是真实的。所以我们需要应用any?,如果数组中有任何元素,则返回true。