Jenkinsfile/Groovy:如何在正则表达式模式查找计数中使用变量?

扔石头

在以下声明性语法管道中:

pipeline {
  agent any
  stages {
    stage( "1" ) {
      steps {
        script {
          orig = "/path/to/file"
          two_lev_down = (orig =~ /^(?:\/[^\/]*){2}(.*)/)[0][1]
          echo "${two_lev_down}"
          depth = 2
          two_lev_down = (orig =~ /^(?:\/[^\/]*){depth}(.*)/)[0][1]
          echo "${two_lev_down}"
        }
      }
    }
  }
}

...正则表达式旨在匹配“ /的第三个实例之后的所有内容
第一个,即(orig =~ /^(?:\/[^\/]*){2}(.*)/)[0][1]作品。
但第二,(orig =~ /^(?:\/[^\/]*){depth}(.*)/)[0][1]没有。它生成此错误:

java.util.regex.PatternSyntaxException: Illegal repetition near index 10
^(?:/[^/]*){depth}(.*)

我认为问题是使用变量depth而不是硬编码整数,因为这是工作代码和错误生成代码之间的唯一区别。

如何Groovy在正则表达式模式 find-count 中使用变量?或者Groovy编写在第 n 次出现模式后返回所有内容的正则表达式-language 惯用方法是什么

注入

您缺少$变量前面的 。它应该是:

orig = "/path/to/file"
depth = 2           
two_lev_down = (orig =~ /^(?:\/[^\/]*){$depth}(.*)/)[0][1]

assert '/file' == two_lev_down 

为什么

在 Groovy 中,字符串插值(over GString)适用于 3 个字符串文字:

  1. 通常的双引号: "Hello $world, my name is ${name.toUpperCase()}"
  2. Slashy-strings 通常用作正则表达式文字: /.{$depth}/
  3. 多行双引号字符串:
def email = """
Dear ${user}.
Thank your for blablah.
""" 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在正则表达式中使用变量?

如何在正则表达式中使用变量?

如何在Java中使用正则表达式捕获多行模式?

如何在Scala中使用正则表达式进行模式匹配?

如何在R中使用正则表达式查找给定字符串旁边的模式

Perl:如何在正则表达式中使用字符串变量作为搜索模式和替换

如何在python中使用正则表达式替换模式?

如何在Django 2中使用此正则表达式URL模式

如何在Pyspark中使用Rlike使用多个正则表达式模式

如何在C ++中使用正则表达式匹配以下坐标模式?

如何在一个正则表达式对象中使用多种模式?

如何在Python中使用正则表达式从网址中提取某些模式?

如何在bash中使用正则表达式变量进行查找和替换命令?

正则表达式模式以及如何在C ++中使用它

如何使用正则表达式查找特定模式?

如何在工厂模式中使用ZF2正则表达式验证器

如何在C ++中使用正则表达式标记化来捕获重复模式

如何在preg_replace中使用数组和正则表达式作为模式?

如何在XSLT的正则表达式模式中使用NOT运算符(^)?

如何在查找命令中使用正则表达式命名?

如何在正则表达式模式中使用包含方括号的字符串变量?

如何在 Windows 批处理文件中使用正则表达式查找特定模式?

如何在正则表达式中使用 qantizer 通过重复模式获取组

如何在python中使用正则表达式区分列表模式

如何在 preg_replace 模式中使用正则表达式特殊字符

如何在 Python 中使用正则表达式查找和替换 URI 片段?

如何在python中使用正则表达式在多个句子的段落中搜索模式?

我如何在 python 中使用正则表达式来查找这些模式

如何在锚定正则表达式模式中使用负前瞻?