2017-06-05 24 views
0

ログファイルを正規表現で解析しようとしていますが、最初にIPアドレスを引き出すのはわかりましたが、ログファイルの残りの部分を超えて移動する方法はわかりません。だから、残りの部分の解析を開始するには、正規表現を解析して日付などを解析するだけですか?だから私は2番目の要素72.37.100.86の2番目のIPになるだろう。それから、 " - - - "を除外して日付を第8番目のインデックスとなるGET/HTTP/1.1:と共に第4要素とし、状態コード200を第9インデックスとしたいと思います。これについての助けがあれば、私は次に何をする必要があるかを理解することに大いに感謝するでしょう。次の正規表現でregexでログファイルを解析しようとしています

package com.text.nginx_log_parser; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
public class RegExTester { 


// Actual Entry : 10.10.100.151 - 72.37.100.86, 192.36.20.508 - - - [04/Jul/2016:12:50:06 +0000] https https https "GET/HTTP/1.1" 200 20027 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36" 
public static String logEntry = "10.10.100.151 - 72.37.100.86, 192.36.20.508 - - - [04/Jul/2016:12:50:06 +0000] https https https \"GET/HTTP/1.1\" 200 20027 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36\"\r\n"; 

//public static String regex = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"; 
//public static String regex = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"; 
public static void main (String [] args){ 

    String regex = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\s*-*\\s*-*\\s*-*"; 
    regexChecker(regex, logEntry); 
    regex = "\\[*\\]\\s."; 
    regexChecker(regex, logEntry); 
} 

public static void regexChecker(String regex, String str){ 

    Pattern pattern = Pattern.compile(regex); 

    Matcher matcher = pattern.matcher(logEntry); 
    //String firstIP = matcher.group(0); 
    //String secondIP = matcher.group(); 
    //String timestamp = 
    while(matcher.find()){ 
     System.out.println(matcher.group(0)); 
    } 
    } 
} 
+0

あたりとしてを通じてキャプチャグループを見ていますか? –

答えて

1

(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[-\s]+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).+?\[(.+?)\].*?\"(.+?)\"\s(\d{3}).*$ 

あなたは、この文字列から何を期待出力this entry on regex101.com

関連する問題