Java 读取带有reg表达式的日志文件时出错
我正在尝试读取一个日志文件,其内容如下: 127.0.0.1 - - [17/OCT/2009:00:02:14 0000] GET xxxxxx xxxx xxx 127.0.0.1---[17/OCT/2009:00:02:14 0000]获取xxxxxx xxxxxx 我尝试了以下reg exp,但出现了Java 读取带有reg表达式的日志文件时出错,java,regex,syslog,Java,Regex,Syslog,我正在尝试读取一个日志文件,其内容如下: 127.0.0.1 - - [17/OCT/2009:00:02:14 0000] GET xxxxxx xxxx xxx 127.0.0.1---[17/OCT/2009:00:02:14 0000]获取xxxxxx xxxxxx 我尝试了以下reg exp,但出现了错误:索引90附近的未关闭组 正则表达式=(\d+.\d+.\d+.\d+)\s-\s\[(\d+)/(\w{3}/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s
错误:索引90附近的未关闭组
正则表达式=(\d+.\d+.\d+.\d+)\s-\s\[(\d+)/(\w{3}/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s(\d{4})].
有人能帮我吗?我认为“[”和“]”应该转义:[[]
和[]]
或\[
和\]
对于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})\\].*")
你忘了逃过一些魔咒:
^(\d+\.\d+\.\d+\.\d+)\s-\s-\s\[(\d+)\/(\w{3})\/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s(\d{4})\]
首先,退而求其次。它们在regexp中有特殊含义。[and]是特殊字符。这就是未关闭组的含义。根据您的正则表达式风格,您需要在每个括号前面加上1\或2\
正则表达式=(\d+。\d+。\d+。\d+)\s-\s[(\d+)/(\w{3})/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s(\d{4})].1或2反斜杠并不取决于正则表达式的风格,而是取决于所使用的语言是否需要对反斜杠进行转义。
^\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})$