使用regex查找ruby json数据



我有一个json文件ou.json:

{
"ProdInf": {
"regex": "^(?i)nyinf-p(\d+)$",
"ou": "OU=Inf,OU=Prod,OU=Servers,DC=example,DC=local"
},
"ProdHyperV": {
"regex": "^(?i)nyhyp-p(\d+)$",
"ou": "OU=HyperV,OU=Prod,OU=Servers,DC=example,DC=local"
},
"ProdRDS": {
"regex": "^(?i)nyrds-p(\d+)$",
"ou": "OU=RDS,OU=Prod,OU=Servers,DC=example,DC=local"
}
"Default": {
"regex": "zzz",
"ou": "OU=Servers,DC=example,DC=local"
}
}

我有:

require 'json'
computername = "nyhyp-p24"
json_file = File.read("./ou.json")
json_hash = JSON.parse(json_file)

然后能够检索散列中的所有正则表达式,并根据每个正则表达式计算computername,如果匹配,则返回相应的ou.first

在上述示例中,ou应该等于"OU=HyperV,OU=Prod,OU=Servers,DC=example,DC=local;

如果没有匹配项,则应返回default.ou

我在JSON 中添加了额外的斜杠来转义它们

如下所示:"^(?i)nyrds-p(\d+)$"->"^(?i)nyrds-p(\\d+)$"

require "json"
json =
<<~JSON
{
"ProdInf": {
"regex": "^(?i)nyinf-p(\\d+)$",
"ou": "OU=Inf,OU=Prod,OU=Servers,DC=example,DC=local"
},
"ProdHyperV": {
"regex": "^(?i)nyhyp-p(\\d+)$",
"ou": "OU=HyperV,OU=Prod,OU=Servers,DC=example,DC=local"
},
"ProdRDS": {
"regex": "^(?i)nyrds-p(\\d+)$",
"ou": "OU=RDS,OU=Prod,OU=Servers,DC=example,DC=local"
},
"Default": {
"regex": "zzz",
"ou": "OU=Servers,DC=example,DC=local"
}
}
JSON
configs = JSON.parse(json, symbolize_names: true)

然后你可以定义一些类似的方法

def find_ou(computer_name, configs)
configs
.find { |_, config| computer_name.match?(%r{#{config[:regex]}}) }
&.last
&.dig(:ou) || configs[:Default][:ou]
end

然后

find_ou("nyhyp-p24", configs)
# => "OU=HyperV,OU=Prod,OU=Servers,DC=example,DC=local"
find_ou("nyinf-p26", configs)
# => "OU=Inf,OU=Prod,OU=Servers,DC=example,DC=local"
find_ou("something else", configs)
# => "OU=Servers,DC=example,DC=local"

最新更新