2016-09-02 44 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 

有記錄如上,我想從所有字段中提取值,每個字段之間用空格分隔,請幫忙要使用正則表達式來提取文本文件中的值

我使用如下:

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

我已經得到了你想要做什麼的模式,但它並不漂亮:

^"((?:\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?)將匹配並捕獲第一個IP地址,每個元素由1到3個數字組成。然後使用相同的模式來匹配第二個IP地址。

(-)將捕獲連字符 - 不知道爲什麼你想要它,但它是在你想要的輸入。

(\[\d\d\/\w+\/\d{4}(?::\d\d){3} -\d{4}\])捕獲時間戳(方括號中的位)。

"(.*?)"將匹配並捕獲文本字符串。

最後,(\d{3})將捕獲HTTP狀態碼。

綜合起來,這種模式將匹配你想要從你提供的字符串中的東西。