Java 检查整个多行时 HTML 状态代码的正则表达式 HTML header

Java Regex for HTML status code when checking entire multiline HTML header

我想验证 HTTP 响应状态代码 - 语法是 HTML/1.1 200 ... 传递的字符串是多行的,包含换行符。我的初步正则表达式是 ^(HTTP|http)/(1|2)\.\d \d{3}.+$。当我只传递一行时效果很好,没有换行符和其余行。这个正则表达式有什么问题?这是示例代码:

System.out.println(
        "HTTP/1.1 206 Partial Content\n"
        + "Last-Modified: Thu, 18 Sep 2014 03:04:38 GMT\n"
        + "Content-Type: video/mp4\n"
        + "Date: Sat, 14 Mar 2015 21:44:08 GMT\n"
        + "Expires: Sat, 14 Mar 2015 21:44:08 GMT\n"
        + "Cache-Control: private, max-age=21294\n"
        + "Content-Range: bytes 0-17016614/17016615\n"
        + "Accept-Ranges: bytes\n"
        + "Content-Length: 17016615\n"
        + "Connection: keep-alive".matches("^(HTTP|http)/(1|2)\.\d \d{3}.+$"));

编辑:

我认为只对第一行进行子字符串化然后检查它是否匹配会更有效。而且正则表达式更简单。

. 可能不匹配换行符。尝试使用 (.|\s)+ 来匹配空白字符:

^(HTTP|http)/(1|2)\.\d \d{3}(.|\s)+$

根据您编辑的问题,问题是连接的字符串应放在括号中,否则将针对最后的字符串部分调用 matches 方法:

System.out.println(
      ("HTTP/1.1 206 Partial Content\n"
      + "Last-Modified: Thu, 18 Sep 2014 03:04:38 GMT\n"
      + "Content-Type: video/mp4\n"
      + "Date: Sat, 14 Mar 2015 21:44:08 GMT\n"
      + "Expires: Sat, 14 Mar 2015 21:44:08 GMT\n"
      + "Cache-Control: private, max-age=21294\n"
      + "Content-Range: bytes 0-17016614/17016615\n"
      + "Accept-Ranges: bytes\n"
      + "Content-Length: 17016615\n"
      + "Connection: keep-alive").matches("^(HTTP|http)/(1|2)\.\d \d{3}(.|\s)+$"));