正規表現の一般的な使用法の 1 つは、一致を一致に基づくものに置き換えることです。
たとえば、チケット番号を含む commit-text は、 (一部の環境の例として <>ABC-1234: some text (ABC-1234)
に置き換える必要があります。)<ABC-1234>: some text (<ABC-1234>)
これはJavaでは非常に簡単です
String message = "ABC-9913 - Bugfix: Some text. (ABC-9913)";
String finalMessage = message;
Matcher matcher = Pattern.compile("ABC-\\d+").matcher(message);
if (matcher.find()) {
String ticket = matcher.group();
finalMessage = finalMessage.replace(ticket, "<" + ticket + ">");
}
System.out.println(finalMessage);
になります<ABC-9913> - Bugfix: Some text. (<ABC-9913>)
。
しかし、入力文字列に異なる一致がある場合、これは異なります。if (matcher.find()) {
に置き換えて、少し異なるコードを試しましたwhile (matcher.find()) {
。結果は、二重置換 ( ) で台無しになり<<ABC-9913>>
ます。
一致するすべての値をエレガントな方法で置き換えるにはどうすればよいですか?