Java では、および他のいくつかの言語ではそう思われますが、パターン内の後方参照の前にはバックスラッシュ ( \1
、\2
、\3
など) が付きますが、置換文字列ではドル記号 ( 、 、 など) が前に付きます ( $1
、$2
、$3
、および$0
)。
説明するスニペットを次に示します。
System.out.println(
"left-right".replaceAll("(.*)-(.*)", "\\2-\\1") // WRONG!!!
); // prints "2-1"
System.out.println(
"left-right".replaceAll("(.*)-(.*)", "$2-$1") // CORRECT!
); // prints "right-left"
System.out.println(
"You want million dollar?!?".replaceAll("(\\w*) dollar", "US\\$ $1")
); // prints "You want US$ million?!?"
System.out.println(
"You want million dollar?!?".replaceAll("(\\w*) dollar", "US$ \\1")
); // throws IllegalArgumentException: Illegal group reference
質問:
- 置換文字列での後方参照の使用は
$
Java に固有のものですか? そうでない場合、どの言語で開始されましたか? どのフレーバーがそれを使用し、どのフレーバーが使用しないのですか? - なぜこれが良い考えなのですか?同じパターン構文に固執しないのはなぜですか? それは、よりまとまりがあり、習得しやすい言語につながるのではないでしょうか?
- 上記のステートメント 1 と 4 が 2 と 3 の代わりに「正しい」ステートメントである場合、構文はより合理化されませんか?