替换字符串中的反向引用语法(为什么是美元符号?
在 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
问题:
- 在替换字符串中使用 for backreference 是 Java 独有的吗?如果不是,是什么语言启动了它?什么口味使用它,什么不使用它?
$
- 为什么这是一个好主意?为什么不坚持使用相同的模式语法?这难道不会带来一种更有凝聚力和更容易学习的语言吗?
- 如果上面的语句 1 和 4 是“正确”的,而不是 2 和 3,语法不是会更简化吗?