我想验证 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/