Java中正则表达式匹配失败问题求助
问题解决:正则匹配时抛出No match found异常
核心问题
你的代码直接调用matcher.group(1)之前,没有先执行匹配检查。Java的Matcher对象必须先通过find()或matches()方法确认匹配成功,才能安全调用group()提取分组内容,否则就会抛出No match found异常。
修正后的代码
String test = "Server returned HTTP response code: 403 for URL: https://an.url.example"; Pattern pattern = Pattern.compile(".*\\s([\\d]{3})\\s.*"); Matcher matcher = pattern.matcher(test); if (matcher.find()) { // 先执行匹配检查,确认存在匹配结果 System.out.println(matcher.group(1)); } else { System.out.println("未找到匹配的错误码"); }
为什么regex101能匹配成功?
regex101这类在线测试工具会自动执行匹配操作(相当于帮你调用了find()),所以能直接展示匹配结果,但Java代码里必须显式调用匹配方法,否则Matcher处于未匹配状态,调用group()必然抛出异常。
额外优化建议
你的正则可以更精准,避免误匹配其他三位数字:
// 直接匹配"HTTP response code: "后的三位数字,无需通配整个字符串 Pattern pattern = Pattern.compile("HTTP response code: (\\d{3})");
这种写法匹配效率更高,也能减少不必要的匹配范围。
内容的提问来源于stack exchange,提问作者Dari_OS
相关产品推荐
相关产品推荐

