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

如何修改正则表达式排除含-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:32:46