You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Pattern Matcher匹配HTTP响应码失败求助

问题排查与解决:Java正则匹配HTTP响应码失败

嘿,我来帮你搞定这个问题~

你遇到的核心问题是**Matcher.matches()方法的行为特性**:这个方法要求整个输入字符串必须完全匹配正则表达式才会返回true,而你的正则([0-9][0-9][0-9])只能匹配纯三位数字的字符串,显然和你的输入"HTTP/1.1 400 Bad Request"不匹配,所以返回false是正常的。

下面给你两种解决方案:

方案1:修改正则,适配整个字符串匹配

调整正则表达式,让它能匹配完整的HTTP响应头格式,同时捕获中间的三位响应码。可以用这个正则:

String regex = "^HTTP/\\d+\\.\\d+ (\\d{3}) .+$";

解释一下各部分的作用:

  • ^:匹配字符串的开头
  • HTTP/:匹配固定的协议前缀
  • \\d+\\.\\d+:匹配版本号(比如1.1、2.0等)
  • (\\d{3}):捕获三位数字的响应码(这是你要的分组)
  • .+$:匹配响应码后面的所有内容直到字符串结尾

修改后的方法调用就能正常返回400了。

方案2:改用Matcher.find()方法

如果你不想修改正则,也可以把matches()换成find()方法。find()的作用是在输入字符串中查找任意位置的匹配子串,不需要整个串完全匹配。修改后的代码如下:

private static String getSubString(String regex, String data ) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(data);
    if(matcher.find()) { // 这里换成find()
        return matcher.group(1);
    }
    return null;
}

这样用原来的正则"([0-9]{3})"(或者简化成"(\\d{3})")就能成功捕获到400了。

另外小提示:\\d和[0-9]是等价的,用\\d{3}可以简化你原来的三位数字写法哦~

内容的提问来源于stack exchange,提问作者Fishingfon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:46:21