0

我有一个日志文件,其中包含如下行。

GET /common/data/register/ HTTP/1.1" 200 254614 "https://www.test.com/hiii/ "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.8) Gecko/20100101 Firefox/

我正在尝试获取上一行中为 200 的 http 状态代码。这将放在字符串之后HTTP/1.1"。http 的版本(这里是 1.1)可能并非在所有行中都通用。

请帮助我找出每行中的 http 状态代码。

4

3 回答 3

1

使用inputString.split(" ")它将返回字符串数组,第三个元素应该是状态码。

于 2012-10-15T10:04:34.503 回答
1

试试这个正则表达式: -

    String str = "GET /common/data/register/ HTTP/1.1\" 200 254614 " +
            "https://www.test.com/hiii/ Mozilla/5.0 " +
            "(Windows NT 6.1; WOW64; rv:10.0.8) " +
            "Gecko/20100101 Firefox/ ";

    Pattern pattern = Pattern.compile("HTTP/\\d.\\d\"\\s(\\d{3})");
    Matcher match = pattern.matcher(str);

    while (match.find()) {
        System.out.println(match.group(1));  // Prints 200
    }

这是对上述正则表达式的解释:-

  • HTTP/\\d.\\d\"-> 将匹配HTTP/1.1". 你可以有任何状态(例如:5.4)

  • \\d.\\d-> 匹配用点分隔的两个数字。

  • (\\d{3})-> 连续匹配 3 位数字以匹配状态代码。我们已将其捕获在一个组中,因为我们需要此信息。

于 2012-10-15T10:07:59.743 回答
0

该行是否始终包含 http/1.1 ?如果是这样,您应该能够在 java http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#substring(int , int)中使用 substring 方法

于 2012-10-15T10:07:07.950 回答