使用reg表达式读取日志文件时出错

时间:2009-11-18 14:45:58

标签: java regex syslog

我正在尝试读取内容如下所示的日志文件:

127.0.0.1 -  - [17/OCT/2009:00:02:14 0000] GET xxxxxx  xxxx  xxx 

我尝试了以下reg exp,我得到了ERROR: Unclosed group near index 90

regex = (\d+\.\d+\.\d+\.\d+)\s-\s-\s\[(\d+)/(\w{3})/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s(\d{4}\)].*

有人可以帮助我吗?

5 个答案:

答案 0 :(得分:2)

你忘了逃避一些角色:

^(\d+\.\d+\.\d+\.\d+)\s-\s-\s\[(\d+)\/(\w{3})\/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s(\d{4})\]

答案 1 :(得分:1)

我认为应该转义“[”和“]”:[[][]]\[\]

对于Java:

java.util.regex.Pattern.compile("(\\d+.\\d+.\\d+.\\d+)\\s-\\s-\\s\\[(\\d+)/(\\w{3})/(\\d{4}):(\\d{2}):(\\d{2}):(\\d{2})\\s(\\d{4})\\].*")

答案 2 :(得分:0)

首先,使用后退逃脱[和]。它们在regexp中具有特殊含义。

答案 3 :(得分:0)

[和]是特殊字符。这就是未关闭集团的意思。根据你的正则表达式的风格,你需要在每个括号前放置1 \或2 \。

regex =(\ d +。\ d +。\ d +。\ d +)\ s- \ s- \ s [(\ d +)/(\ w {3})/(\ d {4}):( \ d {2}):(\ d {2}):(\ d {2})\ S(\ d {4})] *

答案 4 :(得分:0)

^\d+\.\d+\.\d+\.\d+\s-\s-\s\[\d{2}\/[A-Z]{3}\/\d{4}:\d{2}:\d{2}:\d{2}\s\d{4}]\sGET\s(.{6}\s.{4}\s.{3})$