2012-05-31 3 views
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 

다음 단어를 얻을 수있는 간단한 방법이 있나요?

나는 다음과 같은 문자를 잡아하는 방법 단지 확실하지 않다 "클라이언트"

가 어떤 지원이 감사합니다.

편집 오류 :

+0

[이 답변] (http://stackoverflow.com/a/106223/215168) 일부 사용 –

답변

4

편집 방법에는 여러 가지가 있습니다. 귀하의 예를 들어, 하나의 정규 표현식 캡처로 IP를 추출 할 수 있습니다 :

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

을 당신이 정말로 다른 이유로 분할과 토큰 화하는 것을 선호하는 경우, 당신은 다음 토큰에, 키에 다음 인덱스를 스캔 Enumerable#drop_while을 사용할 수 있습니다 : IPv4를에 주소의 정규 표현식이있다

def parse_ip(flag) 
    flag.split.drop_while{|token| token !~ /^client:/}[1] 
end 
+0

브릴리언트이어야한다 그. 건배. –

0
"client: 12.345.678.910"[/client:\s*(.*?)\s*$/, 1] 
=> "12.345.678.910" 
관련 문제