我正在解析apache日志条目
59.167.203.103 - - [28/May/2013:03:12:47 +0000] "POST /some/some.htm HTTP/1.1" 200 1187 "-" "xyzf/2.00.16 xyzNetwork/609.1.4 xyzwin/13.0.0"
以下给出RegEx及其正常工作。
String logentrypattern = "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+) \"([^\"]+)\" \"([^\"]+)\"";
但是在少数条目中 responsebytes 是“ - ”而不是某些值,这让我跟随erorr并说无法解析。请帮忙
Bad log entry (or problem with RE?):
89.178.46.54 - - [24/May/2013:17:04:59 +0000] "PUT /xyz-pmp/xyz-pmp.htm HTTP/1.1" 200 - "-" "kdm/1.0"
答案 0 :(得分:1)
你可以试试这个:
^([\\d.]+) (\\S+) (\\S+) \\[([\\w:\/]+\\s[+\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+|-) \"([^\"]+)\" \"([^\"]+)\"
^^
我添加了你可以破折号的位。也许在那里有一个\\S+
区块会更好吗?嗯,这完全取决于你正在做什么。如果意图只接受带数字的条目,那么你的正则表达式正在按预期工作。如果它只是捕获条目的不同部分,请确保您知道数据的结构以及它们可以提供给您的不同形式。