Java正则匹配Sentry分页响应头中第二个results字段失败求助
问题分析与解决
你的代码有几个关键问题导致bool始终无法设为true,我来一步步帮你拆解:
1. Java正则的写法误区
你用了JavaScript风格的正则分隔符/,比如/\\(?+1\\).+(results)=\"true\"/,但Java里不需要用/包裹正则表达式,这是JS特有的语法,直接写正则字符串即可。
2. String.matches()的特性
matches()方法要求正则表达式匹配整个字符串,而不是部分匹配。你的目标是找字符串里的某一段内容,所以用matches()永远不会返回true——除非你的正则能覆盖整个link字符串,这显然不是你想要的。
3. 正则表达式本身的错误
你的正则\\(?+1\\).+(results)=\"true\"完全和目标内容不匹配,\\(?+1\\这部分没有任何意义,根本无法定位到results字段。
修复后的代码方案
我提供两种可靠的解决思路,你可以根据需求选择:
方案一:精准获取第二个results的值
这种方式可以明确找到第二个results字段,并判断其值是否为true,逻辑更清晰:
import java.util.regex.Matcher; import java.util.regex.Pattern; // 注意:你的link字符串最后一个尖括号漏了闭合,建议补上> String link = "<https://sentry.io/api/0/projects/{org-slug}/{project-slug}/issues/?&cursor=1619685938645:0:1>; rel=\"previous\"; results=\"false\"; cursor=\"1619685938645:0:1\", <https://sentry.io/api/0/projects/theloops/java-project/issues/?&cursor=1618813765615:1:0>; rel=\"next\"; results=\"true\"; cursor=\"1618813765615:1:0>"; log.info(link); boolean bool = false; // 定义匹配results="值"的正则,捕获括号内的内容就是对应的值 Pattern resultsPattern = Pattern.compile("results=\"(true|false)\""); Matcher matcher = resultsPattern.matcher(link); // 遍历所有匹配项,定位到第二个结果 int matchCount = 0; while (matcher.find()) { matchCount++; if (matchCount == 2) { // 对比捕获到的值是否为true bool = "true".equals(matcher.group(1)); break; } } // 验证结果 log.info("第二个results的值是否为true: " + bool);
方案二:直接匹配第二个results为true的情况
如果你只需要判断第二个results是否为true,可以用更简洁的正则直接匹配:
String link = "<https://sentry.io/api/0/projects/{org-slug}/{project-slug}/issues/?&cursor=1619685938645:0:1>; rel=\"previous\"; results=\"false\"; cursor=\"1619685938645:0:1\", <https://sentry.io/api/0/projects/theloops/java-project/issues/?&cursor=1618813765615:1:0>; rel=\"next\"; results=\"true\"; cursor=\"1618813765615:1:0>"; log.info(link); boolean bool = false; // 正则逻辑:先匹配一个任意值的results字段,再匹配任意内容,最后匹配results="true" Pattern pattern = Pattern.compile("results=\".+\".*results=\"true\""); if (pattern.matcher(link).find()) { bool = true; }
额外提示
你提供的link字符串最后一个<对应的闭合尖括号漏写了,建议补上>,避免后续可能的解析问题。
内容的提问来源于stack exchange,提问作者Akshay Jaisinghani
相关产品推荐
相关产品推荐

