1

长话短说,我正在检查一个相当长的错误日志。我想查找并解析与每个错误相关的 IP 地址。

我要解析的示例

客户:12.345.678.910

def check_file( file, string )
  File.open( file ) do |io|
    io.each do |line|
      result << parse_ip( line ) if line.include? string
    end
  end
  result
end

def parse_ip( flag )
  flag = flag.split.find_all{|word| /^client:.+/.match word}
  ip = flag. # need to grab ip here
  ip
end

有没有一种简单的方法来获取下一个单词?

我只是不确定如何抓住“客户:”之后的字符

任何帮助表示赞赏。

编辑:语法错误

4

2 回答 2

4

有几种方法可以做到这一点。对于您的示例,您可以使用单个正则表达式捕获来提取 ip:

def parse_ip( flag )
  m = /\bclient:\s*([\d\.]+)/.match flag
  m && m[1]
end

如果您出于其他原因确实更喜欢使用 split 进行标记化,您可以使用Enumerable#drop_while扫描到键,然后索引到下一个标记:

def parse_ip( flag )
  flag.split.drop_while{|token| token !~ /^client:/}[1]
end
于 2012-05-31T17:46:23.463 回答
0
"client: 12.345.678.910"[/client:\s*(.*?)\s*$/, 1]
 => "12.345.678.910" 
于 2012-05-31T18:06:34.220 回答