- Home ›
- Java正規表現の使い方 ›
- 正規表現を使った置換 ›
- HERE
置換の時のエスケープ処理
前のページで確認したとおり、置換する文字列の中で"$0"や"$1"と記述すると特別な意味を持ちます。そこで置換する文字列の中で"$"を単なる文字として使いたい場合には"¥"を使って"¥$"と記述して下さい。
次の例を見てください。
String str = "Orange is 100dollar, Banana is 180dollar."; String regex = "(¥¥d.+?)dollar"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); String result = m.replaceFirst("¥¥$$1");
今回の場合、最初にパターンにマッチするのは"100dollar"です。置換する文字列は"¥¥$$1"となっており、"¥¥$"が文字としての"$"であり、"$1"がグループ1にマッチした部分文字列となりますので、結果的に"$100"に置き換わります。
Orange is $100, Banana is 180dollar.
またエスケープに使用される"¥"も置換する文字列の中で特別な意味を持つことになるので、単なる文字として"¥"を使いたい場合も"¥"を使って"¥¥"として下さい。
次の例を見てください。
String str = "Orange is 100yen, Banana is 180yen."; String regex = "(¥¥d.+?)dollar"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); String result = m.replaceFirst("¥¥¥¥$1");
今回の場合、最初にパターンにマッチするのは"100yen"です。置換する文字列は"¥¥¥¥$1"となっており、"¥¥¥¥"が文字としての"¥"であり、"$1"がグループ1にマッチした部分文字列となりますので、結果的に"¥100"に置き換わります。
Orange is ¥100, Banana is 180yen.
サンプルプログラム
では実際に試してみます。
import java.util.regex.Pattern; import java.util.regex.Matcher; class JSample3_1{ public static void main(String args[]){ String str = "Orange is 100dollar, Banana is 180dollar."; String regex = "(¥¥d.+?)dollar"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); String result = m.replaceAll("¥¥$$1"); System.out.println("replaceAll(¥"¥¥$$1¥")"); System.out.println("before : " + str); System.out.println("after : " + result); } }
ではコンパイルを行った上で実行してみます。
( Written by Tatsuo Ikura )