Jenkins/Groovy:如何拉取字符串的特定部分

Jenkins/Groovy: How to pull specific part of a string

我有一个看起来像这样的字符串:

data = ABSIFHIEHFINE -2938 NODFNJN {[somedate]} oiejfoen

我只需要在包含 {[]} 的情况下拉取 {[somedate]}。 我试图做 data.substring(0, data.indexOf(']}')) 来删除字符串的结尾,但它也删除了我需要保留的符号

I need to pull {[somedate]} only with {[]} included.

def data = 'ABSIFHIEHFINE -2938 NODFNJN {[somedate]} oiejfoen'

// you could do error checking on these to ensure
// >= 0 and end > start and handle that however 
// is appropriate for your requirements...
def start = data.indexOf '{['
def end = data.indexOf ']}'

def result = data[start..(end+1)]

assert result ==  '{[somedate]}'

您可以使用正则表达式搜索来完成:

data = "ABSIFHIEHFINE -2938 NODFNJN {[somedate]} oiejfoen"
def matcher = data =~ /\{\[.+?\]\}/
if( matcher ) {
    echo matcher[0]
}
else {
    echo "no match"
}

输出:

{[somedate]}

说明:

  • =~ 是查找运算符。它创建了一个 java.util.regex.Matcher.
  • 正斜杠之间的字符串(这只是定义字符串文字的另一种方式)是正则表达式:\{\[.+?\]\}
  • RegEx 细分:
    • \{\[ - 文字 {[ 必须转义,因为它们在 RegEx
    • 中具有特殊含义
    • .+? - 任何字符,至少一个,尽可能少(以支持查找包含在 {[]} 中的多个子字符串)
    • \]\} - 文字 ]} 必须转义,因为它们在 RegEx
    • 中具有特殊含义
  • 您可以 test the RegEx only or use Groovy IDE 测试完整的示例代码(将 echo 替换为 println)。