我正在使用正則運算式從我的管道中的字串中獲取一個數字,只要我有匹配項,它就可以正常作業,但是當沒有匹配項時,我會收到錯誤訊息
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 */
}
}
}
}
}
uj5u.com熱心網友回復:
在常規中,當您使用=~(find 運算子) 時,它實際上會創建一個java.util.regex.Matcher,因此您可以使用其任何標準方法,例如find()or size(),因此在您的情況下,您可以開玩笑地使用 size 函式來測驗是否有任何匹配的模式,然后再嘗試提取任何組:
def chngnr = gitmsg =~/([0-9]{1,8})/
assert chngnr.size() > 0
env.ChangeNr = chngnr[0][1]
另一個不錯的選擇是=~在 boolean 的背景關系中使用 運算子,在這種情況下,Groovy 隱式呼叫 matcher.find() 方法,這意味著運算式的計算結果為true字串的任何部分是否與模式匹配:
def chngnr = gitmsg =~/([0-9]{1,8})/
if(chngnr){
env.ChangeNr = chngnr[0][1]
}
else {
...
}
您可以在此處閱讀有關 Groovy 正則運算式的更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/331215.html
