웹 로그에서 조각을 파싱하는 C++ 프로그램을 작성 중이며 원하는 페이지 중 하나가 요청 된 페이지입니다. 나는 string::find
을 사용하여 페이지의 시작과 끝을 정의한 다음 string::substr
을 사용하여 추출합니다. 다음 예제 라인 :string에 문제가 있습니다 :: find
172.138.80.174 - - [05/Aug/2001:21:06:27 -0300] "GET /~csc226 HTTP/1.0" 301 303 "http://www.goto.com/d/search/?Keywords=stringVar+%2B+savitch&view=2+80+0&did=" "Mozilla/4.61 [en] (Win98; I)"
요청 된 페이지가 GET
후 일부 권리가가, 그리고 HTTP
되기 전에 끝이 맞다, 그래서 내가 좋아하는 뭔가를 할 :
int beginning = log_entry.find("\"GET") + 5;
int end = log_entry.find("HTTP) - 5;
std::string requested_page = log_entry.substr(beginning, end);
이 다음이다 무슨 일이 requested_page
에 포함된다 :
/~csc226 HTTP/1.0" 301 303 "http://www.goto.com/d/search/
대신
,617의/~csc226
앞에서 알 수 있듯이 시작은 정확하지만 끝은 아닙니다. 위의 예제 엔트리와 같은 구문으로 3000 줄의 로그를 가지고 있으며 요청 된 페이지의 시작은 모두 정확하며 끝은 없습니다.
어떤 아이디어가 잘못 되었나요?
감사합니다.
오케이, 설명서를 미리 읽어야합니다. 명확하고 간결한 설명을 주셔서 감사합니다. 정확하게 제가 찾고 있던 것이 었습니다! – user3026053