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 

기록은 내가 모든 필드에서 값을 추출 할뿐만 위가 있으며, 각 필드는 공백으로 구분되고, 도와주세요 정규식을 사용하여 텍스트 파일에서 값을 추출 할 :나는 다음과 같이 사용하고</p> <p>

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

왜 자바 스크립트 태그를 포함 시켰습니까? – 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 상태 코드를 캡처합니다.

함께 찍은이 패턴은 제공 한 문자열과 원하는 내용이 일치합니다.

관련 문제