如何修改正则表达式排除含-amd64/-linux的版本号匹配?
如何修改正则表达式匹配不含-amd64/-linux后缀的版本号
问题背景
此前使用正则表达式 \d+\.\S*\d 从Artifactory中解析版本号,可匹配纯版本号或带字符串的版本号,示例如下:
amazon-agent-helpdesk-1.0.10.tgz > 1.0.10 gk2-utils-1.0.0-1065298.tgz > 1.0.0-1065298
现在出现了带 -amd64 或 -linux 后缀的重复版本,需要匹配时遇到这些后缀就停止,仅保留前面的有效版本号,期望匹配结果如下:
1.0.10-amd64-21736 > 1.0.10 1.0.20-SNAPSHOT-1359033-amd64-11240 > 1.0.20-SNAPSHOT-1359033
尝试添加负前瞻 \d+\.\S*\d(?!-amd) 未成功,需要调整正则表达式实现需求。
解决方案
使用以下正则表达式即可实现需求:
\d+\.(?:(?!-amd64|-linux)\S)*\d
原理说明
原正则中的 \S* 会匹配任意非空白字符直到末尾,导致包含 -amd64/-linux 后缀的部分也被纳入匹配。修改后的正则把 \S* 替换为 (?:(?!-amd64|-linux)\S)*:
(?:...)是非捕获组,用于分组但不保存匹配结果(?!-amd64|-linux)是负前瞻断言,确保当前位置后面不会出现-amd64或-linux\S匹配单个非空白字符,整个组的作用是:逐个匹配非空白字符,直到遇到-amd64/-linux的开头为止
匹配验证
对目标字符串测试:
- 输入
1.0.10-amd64-21736→ 匹配结果1.0.10 - 输入
1.0.20-SNAPSHOT-1359033-amd64-11240→ 匹配结果1.0.20-SNAPSHOT-1359033 - 输入
amazon-agent-helpdesk-1.0.10.tgz→ 匹配结果1.0.10 - 输入
gk2-utils-1.0.0-1065298.tgz→ 匹配结果1.0.0-1065298
完全符合预期需求。
内容的提问来源于stack exchange,提问作者Virtual Penman
相关产品推荐
相关产品推荐

