ずっと、なんででけへんのかなーと思っていたのですが(なぜ?)できるのですね!後方参照!
知らないおかげで変なロジックを色んな所に置いてきたかと思うと我ながら恐ろしくなります。。。(笑。。。えない)
Javaでの後方参照はだいたいこんな感じのようです。
- ()で囲まれた部分を対象とする
- ‘$1’ などの ‘$数字’ を参照とする
- ‘$0’ は正規表現全体にマッチした文字列を表す
- $1などを指定したのに該当の()がない場合は java.lang.IndexOutOfBoundsException が発生する
以下に例を載せておきます。
String target = "abcd";
System.out.println(target.replaceAll("abc(d)", "$1abc: $0"));
// => "dabc: abcd"
System.out.println(target.replaceAll("abc(x)", "$1abc: $0"));
// => "abcd"
System.out.println(target.replaceAll("ab(c)(d)", "$1$2ab: $0"));
// => "cdab: abcd"
System.out.println(target.replaceAll("a", "$0x: $0"));
// => "ax: abcd"
// 補足: a → ax: a に置換された
System.out.println(target.replaceAll("abcd", "$0x: $0"));
// => "abcdx: abcd"
// 補足: abcd → abcdx: abcd に置換された
System.out.println(target.replaceAll("vxyz", "$0x: $0"));
// => "abcd"
// 補足: 置換対象なし
System.out.println(target.replaceAll("vxyz", "$1x: $0"));
// => "abcd"
// 補足: 置換対象なし
System.out.println(target.replaceAll("abcd", "$1abc: $0"));
// => java.lang.IndexOutOfBoundsException: group 1
System.out.println(target.replaceAll("abc(d)", "$1$2abc: $0"));
// => java.lang.IndexOutOfBoundsException: group 2
Written with StackEdit.
0 件のコメント:
コメントを投稿