2016-09-02 4 views
-5
"00.00.00.00" 00.00.00.00 - - [07/Jun/2016:00:00:00 -0700] "Hey /acd?bg=1 HTTP/1.1" 200 2 "-" "00.00.00.00:0000" "Java/1.8.0_66" - - 2000 

レコードは、上記のようにありますを使用してテキストファイルから値を抽出したい、私は以下のように使用していますiは、各フィールドはスペースで分離され、すべてのフィールドから値を抽出する、正規表現

を助けてください。

String p; 
    Pattern pattern = Pattern.compile(p); 
    Matcher matcher = pattern.matcher(str); 
    if (matcher.find()){ 
    System.out.println(matcher.group(1)); 
    } 

しかし、正しい出力が得られません。私は希望プットは私が何をしたいんパターンを持っている

00.00.00.00 
00.00.00.00 
- 
- 
07/Jun/2016:00:00:01 -0700 
Hey /acd?bg=1 HTTP/1.1 
200 
+4

なぜあなたはjavascriptタグを組み込みましたか? – ChiefTwoPencils

答えて

0

ある regexでに新しいですが、それはかなりではありません。

^"((?:\d\d?\d?\.){3}\d\d?\d?)" ((?:\d\d?\d?\.){3}\d\d?\d?) (-) (-) (\[\d\d\/\w+\/\d{4}(?::\d\d){3} -\d{4}\]) "(.*?)" (\d{3}) 

は少しそれを打破するには(それは厄介なので):

^文字列の先頭から開始します。

((?:\d\d?\d?\.){3}\d\d?\d?)は、各要素が1〜3桁で構成される最初のIPアドレスと一致して取得されます。同じパターンを使用して、2番目のIPアドレスも一致させます。

(-)はハイフンをキャプチャしますが、なぜそれを望んでいるのかはわかりませんが、入力してください。

(\[\d\d\/\w+\/\d{4}(?::\d\d){3} -\d{4}\])は、タイムスタンプ(角括弧内のビット)をキャプチャします。

"(.*?)"は、テキスト文字列と一致してキャプチャします。

最後に、(\d{3})はHTTPステータスコードを取得します。

このパターンは、あなたが提供した文字列から必要なものと一致します。

関連する問題