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

次の単語を取得する簡単な方法はありますか?

「client:」に続く文字を取得する方法がわかりません。

任意の支援をいただければ幸いです。

編集: 構文エラー

4

2 に答える 2

4

それにはいくつかの方法があります。あなたの例では、単一の正規表現キャプチャで IP を抽出できます。

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

他の理由で分割でトークン化することを本当に好む場合は、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 に答える