Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取带有reg表达式的日志文件时出错_Java_Regex_Syslog - Fatal编程技术网

Java 读取带有reg表达式的日志文件时出错

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

我正在尝试读取一个日志文件,其内容如下:

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(\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})$