2017-07-24 79 views
0

在groovy正則表達式中還不是很強大。我試圖在常規中創建一個匹配器,因爲字符串[sf:retrieve] Request ID for the current retrieve task: 09Sg00000052ZAPEA2Groovy中正確的正則表達式模式是什麼

:後面的最後部分,例如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 
    } 
} 

該方法不拋出任何錯誤沒有任何回報

回答

1

您可以使用.*:\\s(\\w+)的模式和組率先拿到賽(我已經與java.util.regex.Pattern中的測試),我想你正在使用的lib會做同樣的方式:

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)); 
} 
+0

很好的回答,將在普通的Java工作呢! – Daniel

0

你的一些例子是詹金斯特有的,我沒有可用的測試,所以這個答案很簡單 - 古怪。但是,這個工程,我相信你會想:

​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 
相關問題