regex - 使用正则表达式捕获 Jenkins 管道中的数据

标签 regex jenkins groovy

我想在我的 Jenkins 管道中分解一个 docker 镜像 uri。示例 uri = https://test-registry.home.imagehub.com/engineering/images/rhel:latest 。我想将其分为 4 个部分。

https://(test-registry).home.imagehub.com/(engineering/images)/(rhel):(latest)

$1 = 测试注册表

$2 = 工程/图像

$3=rhel

$4 = 最新

注意事项 $2 有时只有一个目录级别

我认为正确的正则表达式是:

/\w+:\/\/(.*)\.[^\/]+/(.*)/(\w+):(.*)/

这应该抓取 //s 之后到第一个 .(句点)的所有内容,价格为 1 美元

[^\/] 应通过子域向上移动到/分隔符

我希望第二个 (.*) 贪婪到但不包括最后一个/分隔符。

第三部分应该抓取最后一个 / 分隔符之后和 : 之前的所有内容

第四部分应该抓取:(冒号)之后的所有内容

我确实包含了正则表达式

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+:\/\/(.*)\./

我期望的是:

registry = test-registry 

所以我回显结果

echo registry.group(1)

但这给了我:

java.lang.IllegalStateException: No match found

这没有任何意义。我尝试使用 /(\w+):/ 获取 https,但结果相同。

我也尝试过上课,但结果相同,没有匹配。

我想一次性获得所有四个部分,但如果需要,我会在单独的正则表达式中取出每个部分。此时我想弄清楚如何才能至少获得一场比赛。

我添加:

导入java.util.regex.Matcher

然后在脚本部分添加:

defregistry = 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

来源和示例:https://mrhaki.blogspot.com/2009/09/groovy-goodness-matchers-for-regular.html

关于regex - 使用正则表达式捕获 Jenkins 管道中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57582605/

相关文章:

用于替换文本箭头的 Javascript 正则表达式 -> <-

MySQL 正则表达式 : matching blank entries

Jenkins 管道抛出 "StackOverflowError: Excessively nested closures/functions"

jenkins - job-dsl-core jar 版本更新至 1.44 & githubPullRequest 关闭不起作用

linux - Jenkins - phantomJS 功能测试失败

groovy - 我如何知道 Jenkins 作业在作业完成后在等待队列中等待了多长时间?

xml - XmlSlurper转换html编码的符号

javascript - 具有动态变量的正则表达式

Python正则exp匹配上标2

java - Spock 测试私有(private)方法时出现错误?