2016-12-21 8 views
0

groovyを使うのはとても新しいです。特にJenkins + Groovy + Pipelinesについて言えば、JenkinsとGroovyとRegex

私は時々変更できる文字列変数を持っていますが、文字列が返す可能性のある2つまたは3つの結果に対応するために正規表現を適用したいとします。私は私のGroovyのコードで

r = "Some text that will always end in either running, stopped, starting." def regex = ~/(.*)running(.*)/ assert regex.matches(r)

しかし、私はジェンキンス出力でエラーが表示さ:

hudson.remoting.ProxyException:groovy.lang.MissingMethodException:いいえ署名をメソッドのjava.util.regex.Pattern.matches()は、引数の型に適用されます。(java.lang.String)

更新日: ここで正規表現の情報と別の投稿のヒント(do .. while() in Groovy with inputStream?)を使用してリモートプロセスを待つために作成しているパイプラインジョブでループを作成している間に、きれいなjenking groovyを作成することができました。

  while({ 
       def r = sh returnStdout: true, script: 'ssh "Insert your remote ssh command that returns text' 
       println "Process still running. Waiting on Stop" 
       println "Status returned: $r" 
       r =~ /running|starting|partial/ 
      }()); 
+0

正規表現でthis exampleを参照してください他に、false

と一致した場合、これはtrueを返しますおかげで@injecteer – JuanD

答えて

0

を試してみては次のようになります。

String r = "Some text that will always end in either running, stopped, starting." 
assert r =~ /(.*)running(.*)/ 
+0

assertは、一致するかどうかを問わず常にTRUEを返しますか? – JuanD

+0

'assert'は実動コードでは返されません。それは通常、最初に前提条件を確認するために使用されます – injecteer

+0

一致があるかどうか(例えば、ループを入力して中断した場合など)に対処する最良の方法は何でしょうか? – JuanD

0

matchesは文字列を受け取りません。

ストレートフォワード

Pattern.compile("your-regex").matcher("string-to-check").find() 
0

あなたはここでしか、この正規表現を使用している場合は、次のことを試すことができます。

r = "Some text that will always end in either running, stopped, starting." 
assert r ==~ /(.*)(running|stopped|starting)\.?$/, "String should end with either running, started or stopped" 

説明:

(.*) - matches anything 
(running|stopped|starting) - matches either running, stopped or starting 
\.? - optionally end with a dot expect zero or one occurrence of a dot, but you need to escape it, because the dot is a regex special character 
$ - end of the line, so nothing should come after 

==~演算子は、Groovy binary match operatorです。それは私が「|起動| R =〜/実行を停止/」「アサート」行を取り出し、ちょうどやってしまった101

+0

詳細な説明とリンクをありがとう。最後に、 '==〜'の代わりに '=〜'を使用すると、私はこのコードを使いたいと思っていました。 – JuanD

+0

結果は同じです。しかし、 '=〜'は正規表現オブジェクトを返します。一致しない場合は 'null'です。 'assert null'がアサートします。したがって、それは同様に動作します。オブジェクトを使用していないので、必ずしもオブジェクトが必要なわけではありません。ブール値で十分です。パフォーマンスとメモリの違いについてはわかりませんが、この場合は非常に小さくなります。'==〜'は最初のマッチで 'true'を返し、最悪の場合に同じ時間を取るでしょう。 – Rik

+0

しかし、それは助けてうれしかった。 Regex101は、正規表現を検証したい場合に最適なサイトです。btw – Rik

関連する問題