jdm*_*dx1 2 regex groovy jenkins
我想在 Jenkins 管道内分解一个 docker 镜像 uri。示例 uri = https://test-registry.home.imagehub.com/engineering/images/rhel:latest。我想将其分为 4 个部分。
https://(test-registry).home.imagehub.com/(engineering/images)/(rhel):(最新)
$1 = 测试注册
$2 = 工程/图像
$3 = 雷尔
$4 = 最新
警告 $2 有时只有一层目录
我相信正确的正则表达式是:
/\w+:\/\/(.*)\.[^\/]+/(.*)/(\w+):(.*)/
Run Code Online (Sandbox Code Playgroud)
这应该以1 美元的价格//s
获取第一个(句点)之后的所有内容.
应[^\/]
通过子域向上移动到 / 分隔符
我希望第二个(.*)
贪婪到但不包括最后一个/分隔符。
第三部分应该抓住最后一个/
分隔符之后和之前的所有内容:
第四部分应该抓住:
(冒号)之后的所有内容
我确实包含了正则表达式
import java.util.regex.Pattern
I have tried a lot of different solutions to make this work in my jenkins declarative pipeline such as inline:
sReg = https://test-registry.home.imagehub.com/engineering/images/rhel:latest
pipeline
agent
stages
stage ('regex')
steps
scripts
def sReg = https://test-registry.home.imagehub.com/engineering/images/rhel:latest
def registry = sReg =~ /\w+:\/\/(.*)\./
Run Code Online (Sandbox Code Playgroud)
我在这里期望:
registry = test-registry
Run Code Online (Sandbox Code Playgroud)
所以我回显结果
echo registry.group(1)
Run Code Online (Sandbox Code Playgroud)
但这给了我:
java.lang.IllegalStateException:未找到匹配项
这毫无意义。我尝试过只获取 https,/(\w+):/
但结果相同。
我也尝试过上课,但结果相同,没有匹配。
我想一次性获得所有四个部分,但如果需要,我会在单独的正则表达式中取出每个部分。此时我想弄清楚如何才能至少获得一场比赛。
我补充道:
导入 java.util.regex.Matcher
然后在脚本部分添加:
def 注册表 = Sreg =~ ///([^.]+)[^/]+/((?:[^/]+/)*[^/]+)/(.+):(.+) /
println(注册表)
当我运行管道时,我得到:
[管道] 回声
java.util.regex.Matcher[pattern=//([^.]+)[^/]+/((?:[^/]+/)*[^/]+)/(.+):( .+) 区域=0,78 最后匹配=]
那么,它不是提取信息,而是等于模式吗?
我在 Sreg 上做了一个 echo,它显示了 uri,所以它应该在我的 def 中获取 uri。
您可以通过以下方式访问组:
def sReg = "https://test-registry.home.imagehub.com/engineering/images/rhel:latest"
def registry = sReg =~ /\w+:\/\/(.*)\.[^\/]+/(.*)/(\w+):(.*)/
println registry[0] //For all groups
println registry[0][1] //For group 1
Run Code Online (Sandbox Code Playgroud)
来源和示例: https: //mrhaki.blogspot.com/2009/09/groovy-goodness-matchers-for-regular.html
归档时间: |
|
查看次数: |
10412 次 |
最近记录: |