如何用正则表达式提取含Test_openjdk标识的Jenkins构建链接
错误原因分析
第一次正则错误
- 用了贪婪匹配的
.+,会连续吞掉多个相邻的链接内容,导致多个链接被合并为一个匹配结果 - 末尾的
\d?匹配逻辑过于宽松,0次或1次数字的限制几乎无效,会匹配大量无关内容 - 反引号包裹的内容没有做特征过滤,所有反引号内容都会被匹配,导致
cent7-aarch64-3这类无关内容也被提取
第二次正则错误
- HTTP部分的规则逻辑错位,写死了
\/\/Test_openjdk的结构,但实际HTTP链接中ci.adoptopenjdk.net域名在Test_openjdk前面,导致所有HTTP开头的链接全部匹配失败 - 仅覆盖了带
console后缀的链接,没有匹配直接以数字/结尾的Jenkins原生构建链接,存在漏匹配
正确解决方案
匹配正则
(?:https?://[\w./-]+(?=Test_openjdk\d))?Test_openjdk\d[\w./-]+?/\d+/
使用时需要开启全局匹配模式。
正则逻辑说明
- 前缀
(?:https?://[\w./-]+(?=Test_openjdk\d))?是可选匹配项,仅匹配后面紧跟Test_openjdk+数字特征的HTTP链接前缀,适配域名变更的需求,不会匹配无关HTTP链接 - 强制匹配核心特征
Test_openjdk\d,确保所有匹配结果都是目标构建链接 - 后缀
[\w./-]+?/\d+/采用非贪婪匹配,匹配到数字+斜杠的结尾格式就停止,自动截断后面的console、consoleFull等多余内容,同时自动过滤反引号内末尾没有斜杠的无效构建记录 - 自动适配两种场景:带HTTP前缀的公开链接、反引号包裹的无HTTP前缀内部构建链接
内容的提问来源于stack exchange,提问作者Asjad khan
相关产品推荐
相关产品推荐

