"00.00.00.00" 00.00.00.00 - - [07/Jun/2016:00:00:00 -0700] "Hey /acd?bg=1 HTTP/1.1" 200 2 "-" "00.00.00.00:0000" "Java/1.8.0_66" - - 2000
上面有记录,我想从所有字段中提取值,每个字段用空格分隔,请帮忙
我使用如下:
String p;
Pattern pattern = Pattern.compile(p);
Matcher matcher = pattern.matcher(str);
if (matcher.find()){
System.out.println(matcher.group(1));
}
但我没有得到正确的输出。我是正则表达式的新手 期望的输出是
00.00.00.00
00.00.00.00
-
-
07/Jun/2016:00:00:01 -0700
Hey /acd?bg=1 HTTP/1.1
200
答案 0 :(得分:0)
我有一个可以做你想要的模式,但它并不漂亮:
^"((?:\d\d?\d?\.){3}\d\d?\d?)" ((?:\d\d?\d?\.){3}\d\d?\d?) (-) (-) (\[\d\d\/\w+\/\d{4}(?::\d\d){3} -\d{4}\]) "(.*?)" (\d{3})
稍微分解一下(因为它很讨厌):
^
使其从字符串的开头开始。
((?:\d\d?\d?\.){3}\d\d?\d?)
将匹配并捕获第一个IP地址,每个元素由1到3位数字组成。然后使用相同的模式匹配第二个IP地址。
(-)
会捕捉连字符 - 不确定为什么要这样,但它在你想要的输入中。
(\[\d\d\/\w+\/\d{4}(?::\d\d){3} -\d{4}\])
捕获时间戳(方括号中的位)。
"(.*?)"
将匹配并捕获文本字符串。
最后,(\d{3})
将捕获HTTP状态代码。
总而言之,此模式将匹配您所提供的字符串中的内容。