在 jenkins 管道中使用正则表达式时测试是否匹配
Test if there is a match when using regular expression in jenkins pipeline
我正在使用正则表达式从管道中的字符串中获取数字
只要我有匹配就可以正常工作,但是当没有匹配时我会收到错误消息
java.lang.IndexOutOfBoundsException: index is out of range 0..-1 (index = 0)
当我尝试在下一行捕获组时出现错误
env.ChangeNr = chngnr[0][1]
如果我的捕获组中没有匹配项,我该如何测试?
这是管道
pipeline {
agent {
node {
label 'myApplicationNode'
}
}
environment {
GIT_MESSAGE = "${bat(script: "git log --no-walk --format=format:%%s ${GIT_COMMIT}", returnStdout: true)}".readLines().drop(2).join(" ")
}
stages {
stage('get_commit_msg'){
steps {
script {
def gitmsg=env.GIT_MESSAGE
def chngnr = gitmsg =~/([0-9]{1,8})/
env.ChangeNr = chngnr[0][1] /* put test if nothing is extracted */
}
}
}
}
}
在 groovy 中,当您使用 =~
(查找运算符)时,它实际上会创建一个 java.util.regex.Matcher
,因此您可以使用任何 its standard methods,例如 find()
或 size()
,因此在您的情况下,您可以在尝试提取任何组之前开玩笑地使用 size 函数来测试是否存在任何匹配的模式:
def chngnr = gitmsg =~/([0-9]{1,8})/
assert chngnr.size() > 0
env.ChangeNr = chngnr[0][1]
另一个不错的选择是在布尔上下文中使用 =~
运算符,在这种情况下,Groovy 隐式调用 matcher.find() 方法,这意味着表达式计算到 true
如果字符串的任何部分匹配模式:
def chngnr = gitmsg =~/([0-9]{1,8})/
if(chngnr){
env.ChangeNr = chngnr[0][1]
}
else {
...
}
您可以阅读有关 Groovy 正则表达式 Here
的更多信息
我正在使用正则表达式从管道中的字符串中获取数字 只要我有匹配就可以正常工作,但是当没有匹配时我会收到错误消息
java.lang.IndexOutOfBoundsException: index is out of range 0..-1 (index = 0)
当我尝试在下一行捕获组时出现错误
env.ChangeNr = chngnr[0][1]
如果我的捕获组中没有匹配项,我该如何测试?
这是管道
pipeline {
agent {
node {
label 'myApplicationNode'
}
}
environment {
GIT_MESSAGE = "${bat(script: "git log --no-walk --format=format:%%s ${GIT_COMMIT}", returnStdout: true)}".readLines().drop(2).join(" ")
}
stages {
stage('get_commit_msg'){
steps {
script {
def gitmsg=env.GIT_MESSAGE
def chngnr = gitmsg =~/([0-9]{1,8})/
env.ChangeNr = chngnr[0][1] /* put test if nothing is extracted */
}
}
}
}
}
在 groovy 中,当您使用 =~
(查找运算符)时,它实际上会创建一个 java.util.regex.Matcher
,因此您可以使用任何 its standard methods,例如 find()
或 size()
,因此在您的情况下,您可以在尝试提取任何组之前开玩笑地使用 size 函数来测试是否存在任何匹配的模式:
def chngnr = gitmsg =~/([0-9]{1,8})/
assert chngnr.size() > 0
env.ChangeNr = chngnr[0][1]
另一个不错的选择是在布尔上下文中使用 =~
运算符,在这种情况下,Groovy 隐式调用 matcher.find() 方法,这意味着表达式计算到 true
如果字符串的任何部分匹配模式:
def chngnr = gitmsg =~/([0-9]{1,8})/
if(chngnr){
env.ChangeNr = chngnr[0][1]
}
else {
...
}
您可以阅读有关 Groovy 正则表达式 Here
的更多信息