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

标签 java regex match multiline

我想验证 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)+$"));

关于检查整个多行 HTML header 时 HTML 状态代码的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054930/

相关文章:

java - 使用什么异常来防止方法被多次调用?

java - Xades-BES 验证作为校验和

Python正则表达式数字或字符串前后的空格

rust - 匹配绑定(bind)和匹配解构之间的区别?

python - Python 3.10 中未知长度列表的结构模式匹配

javafx 中 Swing 异常 "Toolkit not initialized"

java - 如何将音乐添加到 JFrame?

javascript - 将多个 youtube/vimeo 链接变成嵌入式播放器

javascript - 正则表达式货币验证

regex - 匹配一个连接点使得 Match 不可变