用java正则表达式解析apache日志文件
我试图解析一个apache日志文件,它使用以下模式运行良好:用java正则表达式解析apache日志文件,java,regex,apache,logging,Java,Regex,Apache,Logging,我试图解析一个apache日志文件,它使用以下模式运行良好: ^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"([^\"]+)\"[\\W]+ 但是,它会与以下日志断开: 218.30.103.62 - - [17/May/2015:11:05:11 +0000] "GET /robots.txt HTTP/1.1" 200 - "-" "Sogo
^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"([^\"]+)\"[\\W]+
但是,它会与以下日志断开:
218.30.103.62 - - [17/May/2015:11:05:11 +0000] "GET /robots.txt HTTP/1.1" 200 - "-" "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)"\
我对正则表达式并没有真正的经验,我几乎是在尝试一种错误和尝试的方法,任何帮助都将不胜感激。(我知道d+不应该在那里,但我知道的几乎就是这个…)
有什么想法吗?
谢谢您的格式是:
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
(见附件)
因此,您的正则表达式将是:
"^(\\S+) (\\S+) (\\S+) \\[(.+?)\\] \\\"(.+?)\\\" (\\d{3}) (\\S+) \\\"(.+?)\\\" \\\"(.+?)\\\"[\\W]+ $"
匹配组的位置(我使用apache文档中定义的引用):
[]
)注意-您的正则表达式有点过于复杂,失败的原因是%b并不总是一个数字-当请求不返回任何字节时,它将是
-
而不是0
您说的“它中断”是什么意思?你想达到什么目标?“解析日志文件”实际上没有任何意义。您是想从每一行提取一些特定的信息还是什么?在\d{3}
之后,您有(\d+)
,将其替换为(\d+)
。请参见。您可以将[^\\s]+
缩短为\\s+
@oriberu您是对的,似乎是我睡觉的时间了:D