在 Java 中,似乎在其他一些语言中,模式中的反向引用前面有一个反斜杠(例如\1
, \2
,\3
等),但在替换字符串中它们前面有一个美元符号(例如$1
, $2
, $3
, and also $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 反向引用是 Java 独有的吗?如果不是,是什么语言开始的?什么口味使用它,什么不使用? - 为什么这是个好主意?为什么不坚持相同的模式语法?这不会导致语言更有凝聚力和更容易学习吗?
- 如果上面的语句 1 和 4 是“正确”语句而不是 2 和 3,那么语法会不会更精简?