regex 具有负前瞻的正则表达式版本号

nqwrtyyt  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(191)

我一直在使用下面的正则表达式解析artifactory\d+\.\S*\d的版本号
对于我的用例,它在获取版本号或带有字符串的版本号方面工作得很好。

amazon-agent-helpdesk-1.0.10.tgz > 1.0.10
gk2-utils-1.0.0-1065298.tgz > 1.0.0-1065298

现在我们已经上传了新的版本,基本上是重复的,我不想包括在内。这些新版本将始终包含-amd64以及之后的一些额外字符。我希望能够停止比赛,如果有-amd64-linux

1.0.10 > 1.0.10
1.0.10-amd64-21736 > 1.0.10
1.0.10-amd64-21736-linux-amd64 > 1.0.10
1.0.10-linux-21736 > 1.0.10
1.0.20-SNAPSHOT-1359033 > 1.0.20-SNAPSHOT-1359033
1.0.20-SNAPSHOT-1359033-amd64-11240 > 1.0.20-SNAPSHOT-1359033

我尝试了一些不同的变化来增加负面的前瞻性,比如:\d+\.\S*\d(?!-amd),但我似乎不能得到正确的正则表达式。
除了版本号后面的字符串以-amd-linux开头之外,我如何编辑正则表达式来查找版本号和任何字符串?
列表我想仍然匹配:

amazon-agent-helpdesk-1.0.10.tgz > 1.0.10
gk2-utils-1.0.0-1065298.tgz > 1.0.0-1065298
1.0.10 > 1.0.10
1.0.10-amd64-21736 > 1.0.10
1.0.10-linux-21736 > 1.0.10
1.0.20-SNAPSHOT-1359033 > 1.0.20-SNAPSHOT-1359033
1.0.20-SNAPSHOT-1359033-amd64-11240 > 1.0.20-SNAPSHOT-1359033
t3psigkw

t3psigkw1#

您可以编写Assert右侧特定备选项的模式

\b\d+\.\S*?\d+(?=-(?:amd64|linux)\b|$|\.tgz)

说明

  • ^字符串开头
  • \d+\.匹配1+位和.
  • \S*?匹配可选的非空格字符,尽可能少
  • \d+匹配1+位
  • (?=正前瞻
  • -匹配连字符
  • (?:amd64|linux)\b匹配其中一个选项,后跟单词边界
  • |
  • $Assert字符串的结尾
  • |
  • \.tgz匹配特定分机
  • )关闭前瞻

Regex demo
或者,也可以用点来匹配前导数字,然后匹配除-.以外的非空格字符
但仅当-后面没有直接跟-amd-linux时才匹配-

\b\d+(?:\.\d+)+[^-\s.]*(?:-(?!(?:amd64|linux)\b)[^-\s.]*)*

Regex demo

neskvpey

neskvpey2#

你也可以在没有任何lookahead的情况下尝试这个正则表达式:

^\d+(?:\.\d+)+(?:-SNAPSHOT-\d+)?

RegEx Demo

RegEx详情:

  • ^:开始
  • \d+:匹配1+位
  • (?:\.\d+)+:匹配点,后跟1+位数。重复该组1+次
  • (?:-SNAPSHOT-\d+)?:匹配一个可选文本,以-SNAPSHOT-开头,后跟1+位数字。

相关问题