Groovyと正規表現のマッチンググループに関する問題
次のような他の質問や例を読んだ後、ここに来ました。
正規表現マッチングのためのGroovy構文
Groovyの正規表現/パターンマッチング
また、私がオンラインで見つけたこのドキュメント: https://e.printstacktrace.blog/groovy-regular-expressions-the-definitive-guide/
私はそれで遊んでいて、非常に基本的な正規表現だと思うものを持っていますが、何らかの理由で私はいつも一致しません。
だから私が次のようなgitURLを持っていると想像してください: "ssh://[email protected]/project/repo.git"
グルーヴィーなパイプラインでプロジェクトとリポジトリ自体を抽出したい: "ssh://[email protected]/([a-zA-Z- ] *)/([a-zA-Z- ] *) .git "(この一致を行うためのよりスマートな方法があるかもしれませんが、それでも機能するはずです)
とにかく問題は、私がこれをテストしていることであり、現時点では、グループだけで、単純なsshの一致を作成することさえできません。オンライン正規表現テスターで正常に動作します

しかし、それはオンラインのグルーヴィーな遊び場では機能しません。
これは例です(私はここでそれをテストしています https://groovy-playground.appspot.com/):
この入力:
GIT_URL='ssh://[email protected]/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://[email protected]/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://[email protected]/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
あなたがゼロ番目のインデックスを介して第1の1を取得して、すべての一致を含んで、その後、あなたは経由して、グループ1にアクセスする必要があります[1]
使用してグループ2とします[2]
。
正規表現のヒント:-
リテラル-
文字と一致させる場合は、常に文字クラスの最後に配置してください。
これは実際には私が期待していたものではありませんでしたが、matches()メソッドを呼び出すのを忘れていました
GIT_URL='ssh://[email protected]/project/repo.git'
def match = GIT_URL =~ /ssh:\/\/git@bitbucket\.sits\.net\/([a-zA-Z-_]*)\/([a-zA-Z-_]*)\.git/
match.matches()
println match.group(1)
println match.group(2)
project
repo