【发布时间】:2014-12-26 09:20:50
【问题描述】:
我需要在 Java 程序中使用正则表达式来解析 apache 错误文件,例如:
[Thu Sep 27 12:08:18 2012] [error] [client 151.10.158.10] File does not exist: /srv/www/htdocs/pad/favicon.ico
[Thu Oct 04 17:02:42 2012] [error] [client 151.10.1.10] File does not exist: > /srv/www/htdocs/pad/favicon.ico
[Wed Oct 17 10:16:40 2012] [error] [client 151.10.14.60] File does not exist: /srv/www/htdocs/pad/sites/all/modules/fckeditor/fckeditor/editor/userfiles, referer: http://pad.sta.uniroma1.it/sites/all/modules/fckeditor/fckeditor/editor/fckeditor.html?InstanceName=edit-body&Toolbar=DrupalFull
我已经尝试了几种解决方案(其中一些之前已经在 stackoverflow 上报告过),似乎效果更好的一个是:
^(\[[\w:\s]+\]) (\[[\w]+\]) (\[[\w\d.\s]+\])?([\w\s/.(")-]+[\-:]) ([\w/\s]+)$
但是,它似乎无法匹配以下字符串:
[Thu May 17 22:41:54 2012] [error] [client 118.238.211.206] Invalid URI in request GET :81/phpmyadmin/scripts/setup.php HTTP/1.1
我该如何解决?
编辑 我检查了所有建议的解决方案,虽然提高了匹配行的数量,但它们仍然无法处理以下情况:
[Fri Jul 15 00:24:41 2011] [error] [client 219.12.35.141] script '/srv/www/htdocs/pad2/scripts/setup.php' not found or unable to stat
[Mon May 28 18:43:25 2012] [error] [client 88.110.28.25] Invalid URI in request GET HTTP/1.1 HTTP/1.1
还请注意,我可以在一个组中接收方括号后面的所有数据,包括客户端关键字
【问题讨论】:
-
你能解释一下,你想接收什么数据吗?捕获所有
[...]组和行尾? -
也就是说,我有兴趣接收前三个 [...] 组中编码的信息,以及包含所有剩余文本的第四组