1

現在のApacheログ形式で機能するこの正規表現パターンがあります。

preg_match("/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/", $line, $matches); // pattern to format the line

このログで動作します:

127.0.0.1 - - [19/Jun/2012:11:38:37 +0200] "GET /some_page HTTP/1.1" 200 8243 "http://example.com/referrer" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"

ここで、apacheログ形式を変更してサーバー名を含めるようにしたので、新しいログは次のようになります。

127.0.0.1 - - [19/Jun/2012:11:38:37 +0200] **servername.com** "GET /some_page HTTP/1.1" 200 8243 "http://example.com/referrer" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5"

「GET/url...」の前にservername.comを追加するだけです。

これで正規表現は機能しなくなり、新しいログ形式と一致するように何を変更する必要があるのか​​わかりません。

4

1 に答える 1

1

更新された正規表現は次のとおりです。

preg_match("/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] [\w.]+ \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/", $line, $matches);

サーバー名と一致する[\w。]+グループを追加しました。

于 2012-06-19T10:00:22.910 に答える