regex - groovy 和 regex 匹配组的问题

标签 regex groovy

我是在阅读了一些其他问题和示例之后来到这里的:

Groovy syntax for regular expression matching

Groovy regex/pattern matching

还有我在网上找到的这个文档: https://e.printstacktrace.blog/groovy-regular-expressions-the-definitive-guide/

我在玩它,我认为这是一个非常基本的正则表达式,但由于某种原因,我总是找不到匹配项。

所以想象我有一个像这样的 git url: “ssh://git@bitbucket.sits.net/project/repo.git”

我想在我的 groovy 管道中提取项目和 repo 本身: “ssh://git@bitbucket.sits.net/([a-zA-Z-]*)/([a-zA-Z-]*).git”(也许有进行这场比赛的更聪明的方法,但仍然应该有效)

无论如何,问题是我正在测试这个,目前我什至无法进行简单的 ssh 匹配,最后是我的组。 它在在线正则表达式测试器中运行良好 enter image description here

但它在 groovy playground online 中不起作用。

这是示例(我在这里测试 https://groovy-playground.appspot.com/ ):

这个输入:

GIT_URL='ssh://git@bitbucket.sits.net/project/repo.git'

def match = GIT_URL =~ /ssh:\/\/git@bitbucket\.sits\.net\/([a-zA-Z-_]*)\/([a-zA-Z-_]*)\.git/

println match 

输出不匹配:

java.util.regex.Matcher[pattern=ssh://git@bitbucket\.sits\.net/([a-zA-Z-_]*)/([a-zA-Z-_]*)\.git region=0,45 lastmatch=]

我尝试了一些方法,但连 ssh 匹配都不起作用

GIT_URL='ssh://git@bitbucket.sits.net/project/repo.git'

def match = GIT_URL =~ /ssh/

println match 
java.util.regex.Matcher[pattern=ssh region=0,45 lastmatch=]

我认为这可能是工具中的问题,但在我的 Jenkins 管道中它也不起作用。

还有另一个问题的例子:

def match2 = "f1234" =~ /[a-z]\d{4}/
println match2
java.util.regex.Matcher[pattern=[a-z]\d{4} region=0,5 lastmatch=]

最佳答案

您可以让 Groovy 自己执行正确的匹配器方法,只需使用

String GIT_URL='ssh://git@bitbucket.sits.net/project/repo.git'
def match = GIT_URL =~ /ssh:\/\/git@bitbucket\.sits\.net\/([a-zA-Z_-]*)\/([a-zA-Z_-]*)\.git/
if (match) { 
    println match[0][1]
    println match[0][2]
} else {
    println 'No match' 
}

查看 Groovy 演示。

使用 =~ 运算符,您实际上告诉 Groovy 在较长的字符串中查找部分匹配,使用 ==~,您需要完整的字符串匹配。您只需要 if (match) 即可触发匹配。 match 将包含所有匹配项,因此您可以通过第 0 个索引获得第一个匹配项,然后您可以通过 [1] 访问第 1 组并使用[2]

正则表达式提示:如果要匹配文字 - 字符,请始终将 - 放在字符类的末尾。

关于regex - groovy 和 regex 匹配组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65124469/

相关文章:

javascript - 正则表达式:一次匹配并替换两个组

objective-c - 如何在 iOS 中验证美国或加拿大的邮政编码?

regex - Perl 正则表达式将每个字符捕获为一组

groovy - 在 Jenkinsfile 中检索 env 的所有属性

groovy - GroovyFX应用程序与Gradle一起运行

python - 限制 tk 小部件上的条目

arrays - Node.JS 将可能带有连字符的大写字符串拆分为数组

java - 在 Tomcat 中 session 集群 Grails 应用程序

java - 如何在 IntelliJ IDEA 中修复 "unsupported class file major version 60"?

audio - JAudioTagger删除轨道的前几秒