Javaで実装するサンプルを2つ紹介します。
$nを使用する方法
Matcher#replaceAllメソッドや、Matcher#replaceFirstメソッドは$nで後方参照を使用できます。
String regex = "\\[([0-9]+)\\]"; String src = "[1] [2] [3] [4] [5]"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(src); String result1 = matcher.replaceAll("($1)"); System.out.println(result1); // => (1) (2) (3) (4) (5)
Matcher#groupを使用する方法
Matcher#groupメソッドを使用する方法は多少複雑です。
正規表現にマッチする部分は、Matcher#startメソッドとMatcher#endから取得できます。
この部分文字列を置き換えてしまえばいいというわけです。
こちらの方法では、後方参照で取得した文字列を元にして、編集を加えられるというメリットがあります。
サンプルではアラビア数字から漢数字へ置き換えています。
String regex = "\\[([0-9]+)\\]"; String src = "[1] [2] [3] [4] [5]"; String[] kan = {"一", "ニ", "三", "四", "五"}; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(src); StringBuilder result2 = new StringBuilder(); int lastEnd = 0; String outOfMatch = ""; while(matcher.find()) { outOfMatch = src.substring(lastEnd, matcher.start()); String group = matcher.group(1); int n = Integer.parseInt(group); String kanN = kan[n-1]; result2.append(outOfMatch); result2.append("(" + kanN + ")"); lastEnd = matcher.end(); } outOfMatch = src.substring(lastEnd); result2.append(outOfMatch); System.out.println(result2); // => (一) (ニ) (三) (四) (五)
以下、サンプルソース全体です。