groovy中正确的正则表达式模式是什么

groovy中正确的正则表达式模式是什么,groovy,jenkins-pipeline,Groovy,Jenkins Pipeline,groovy正则表达式还不太强大。我试图在groovy中为当前检索任务09Sg00000052ZAPEA2的字符串[sf:retrieve]请求ID创建一个匹配器 在:i.e 09Sg00000052ZAPEA2之后的最后一部分是唯一不断变化的东西。如果字符串可用,如何仅获取09Sg00000052ZAPEA2部分 这就是我迄今为止所尝试的: import hudson.model.* def parser() { def matcher = manager.getLogMatcher(

groovy正则表达式还不太强大。我试图在groovy中为当前检索任务09Sg00000052ZAPEA2的字符串[sf:retrieve]请求ID创建一个匹配器

在:i.e 09Sg00000052ZAPEA2之后的最后一部分是唯一不断变化的东西。如果字符串可用,如何仅获取09Sg00000052ZAPEA2部分

这就是我迄今为止所尝试的:

import hudson.model.*
def parser() {
    def matcher = manager.getLogMatcher(".*Request ID for the*.*")
    if (matcher.matches()) {
        pbn=matcher.group(matcher.groupCount())
        return pbn
    }
}
该方法不会引发任何错误,也不会返回任何您可以使用的内容。*:\\s\\w+作为模式,并在我使用java.util.regex.pattern测试的组中获得第一个匹配项,我想您使用的库也会以同样的方式执行此操作:

String s = "[sf:retrieve] Request ID for the current retrieve task: 09Sg00000052ZAPEA2";
Pattern pattern = Pattern.compile(".*:\\s(\\w+)");
Matcher matcher = pattern.matcher(s);
if (matcher.matches()) {
    System.out.println(matcher.group(1));
}

您的一些示例是特定于jenkins的,而我没有可供测试的,所以这个答案是简单的groovy。但是,我相信这是你想要的:

​String toMatch = "[sf:retrieve] Request ID for the current retrieve task: 09Sg00000052ZAPEA2"

def finder = (toMatch =~ /.*Request ID for the current retrieve task:(.*)/)
println finder.matches()
println finder.group(1)
基本上,把你想得到的部分放在括号里。根据Java正则表达式语法,这使它成为一个编号组。然后,您可以使用模式匹配器获取该组值(如果匹配的话)。仅供参考,组0是整个正则表达式的完整匹配字符串,因此假设不需要完整内容,则从1开始计算

当我运行此示例时,我会得到以下输出:

true
09Sg00000052ZAPEA2