我一直在使用下面的正则表达式解析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
2条答案
按热度按时间t3psigkw1#
您可以编写Assert右侧特定备选项的模式
说明
^
字符串开头\d+\.
匹配1+位和.
\S*?
匹配可选的非空格字符,尽可能少\d+
匹配1+位(?=
正前瞻-
匹配连字符(?:amd64|linux)\b
匹配其中一个选项,后跟单词边界|
或$
Assert字符串的结尾|
或\.tgz
匹配特定分机)
关闭前瞻Regex demo。
或者,也可以用点来匹配前导数字,然后匹配除
-
或.
以外的非空格字符但仅当
-
后面没有直接跟-amd
或-linux
时才匹配-
Regex demo
neskvpey2#
你也可以在没有任何lookahead的情况下尝试这个正则表达式:
RegEx Demo
RegEx详情:
^
:开始\d+
:匹配1+位(?:\.\d+)+
:匹配点,后跟1+位数。重复该组1+次(?:-SNAPSHOT-\d+)?
:匹配一个可选文本,以-SNAPSHOT-
开头,后跟1+位数字。