Ruby将正则表达式信息放入哈希中

问题描述 投票:0回答:1

我有一个项目,我必须解析apache日志文件并将IP,URL和URL状态代码输出为散列,但是对于如何将元素放入哈希中感到困惑?

这是我当前使用正则表达式的代码,用于从日志文件的每一行中获取所需的信息:

line_array = File.readlines("access_log")
line_array.each { |line| }
#regexp
md = (/^([:\d\.]+) .*\[.*\].*\"[A-Z]+ *(.+) HTTP\S*\s(\d+)/).match(line)
ip = md[1]
url = md[2]
status = md[3]

我当前的代码在正确的位置上是否能够执行此操作?

感谢您的输入和帮助

regex ruby hash
1个回答
0
投票

假设您的md正确返回了您期望的字符串数组,然后尝试:

line_array = File.readlines("access_log")
line_array.each { |line| }
#regexp
md = (/^([:\d\.]+) .*\[.*\].*\"[A-Z]+ *(.+) HTTP\S*\s(\d+)/).match(line)
hash = Hash.new
hash[:ip] = md[1]
hash[:url] = md[2]
hash[:status] = md[3]

这将使用三个键创建一个哈希对象:

hash
=> { ip: 'whatever is in md[1]', url: 'whatever is in md[2]', status: 'whatever is in md[3]' }

也只是为了突出显示,通过访问md [1]您正在访问数组的第二个元素,如果要第一个元素,则需要md [0]

© www.soinside.com 2019 - 2024. All rights reserved.