我需要将数据保存在表格中(用于报告,统计等...),以便用户可以按时间,用户代理等进行搜索.我有一个每天运行的脚本,它读取Apache日志然后将其插入数据库.
日志格式:
10.1.1.150 - - [29/September/2011:14:21:49 -0400] "GET /info/ HTTP/1.1" 200 9955 "http://www.domain.com/download/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
Run Code Online (Sandbox Code Playgroud)
我的正则表达式:
preg_match('/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/',$log, $matches);
Run Code Online (Sandbox Code Playgroud)
现在我打印时:
print_r($matches);
Array
(
[0] => 10.1.1.150 - - [29/September/2011:14:21:49 -0400] "GET /info/ HTTP/1.1" 200 9955 "http://www.domain.com/download/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
[1] => 10.1.1.150
[2] => - …Run Code Online (Sandbox Code Playgroud) 换句话说,我有一个字符串:
"任何东西,逃脱双引号:\",是的,"这里的任何东西都不能匹配.
如何匹配引号内的所有内容?
我在想
^"((?<!\\)[^"]+)"
但我的头脑旋转,应该是积极的还是消极的看法?或者它是否有效?
如何匹配任何字符,除了双引号之外没有反斜杠?
我正在尝试解析以此格式登录的apache日志文件
LogFormat "%t %u [%D %h %{True-Client-IP}i %{UNIQUE_ID}e %r] %{Cookie}i %s \"%{User-Agent}i\" \"%{host}i\" %l %b %{Referer}i"
Run Code Online (Sandbox Code Playgroud)
下面是我正在测试的代码......
import java.util.regex.*;
interface LogExample {
/** The number of fields that must be found. */
public static final int NUM_FIELDS = 11;
/** The sample log entry to be parsed. */
public static final //String logEntryLine = "123.45.67.89 - - [27/Oct/2000:09:27:09 -0400] \"GET /java/javaResources.html HTTP/1.0\" 200 10450 \"-\" \"Mozilla/4.6 [en] (X11; U; OpenBSD 2.8 i386; Nav)\"";
String logEntryLine = "[02/Dec/2013:14:10:30 -0000] - [52075 …Run Code Online (Sandbox Code Playgroud)