2016-12-01 104 views
0

我有git登錄變量 中的多行字符串,並希望用超鏈接替換匹配的行 ,但保留Groovy原始字符串的某些部分。
Groovy字符串替換鏈接

例子:

commit 7a1825abc69f1b40fd8eb3b501813f21e09bfb54 
Author: Filip Stefanov 
Date: Mon Nov 21 11:05:08 2016 +0200 

    TICKET-1 

    Test change 

    Change-Id: I7b4028e504de6c4a48fc34635d4b94ad038811a6 

應該像這樣:

commit 7a1825abc69f1b40fd8eb3b501813f21e09bfb54 
Author: Filip Stefanov 
Date: Mon Nov 21 11:05:08 2016 +0200 

    <a href=http://localhost:8080/browse/TICKET-1>TICKET-1</a> 

    Test change 

    <a href=http://localhost:8081/#/q/I7b4028e504de6c4a48fc34635d4b94ad038811a6,n,z>Change-Id: I7b4028e504de6c4a48fc34635d4b94ad038811a6</a> 

林在Groovy正則表達式很不好不知道如何使用分組或關閉到目前爲止好:

mystring.replaceAll(/TICKET-/, "http://localhost:8080/browse/TICKET-") 

注意: TICKET {int}和Change-Id {hash}是變量

+0

嘗試這樣:mystring.replaceAll(/(TICKET - 。)/,「url \ 1」)。 \ 1是您匹配的組。 – MYGz

+0

嘗試'.replaceAll(/(?m)^([\ \ t] +)(TICKET- \ d +)(\ R {2}。\ \ R {2} \ s +)(Change-Id:\ s +) (\ S +)/,「$ 1 $2 $ 3 $ 4 $4$5」)',這裏是[regex demo](https://regex101.com/r/9vKjYE/1)。 –

回答

1
mystring.replaceAll(/(TICKET-\d++)/, '<a href="http://localhost:8080/browse/$1">$1</a>') 
     .replaceAll(/Change-Id: (I\p{XDigit}++)/, '<a href="http://localhost:8081/#/q/$1,n,z">Change-Id: $1</a>') 

當然,您必須相應地更換動態部件。目前它至少是TICKET-I之後的一個數字,然後是Change-ID:之後的至少一個十六進制數字。

+0

完美!正如我所知,在Gerrit中,變更ID總是以I開頭。 \ p是什麼意思? –

+0

這是一個角色類。查看有效的https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html – Vampire