Backreferences syntax in replacement strings (why dollar sign?)
Posted
by polygenelubricants
on Stack Overflow
See other posts from Stack Overflow
or by polygenelubricants
Published on 2010-05-23T04:56:08Z
Indexed on
2010/05/23
5:00 UTC
Read the original article
Hit count: 339
In Java, and it seems in a few other languages, backreferences in the pattern is preceded by a slash (e.g. \1
, \2
, \3
, etc), but in a replacement string it's preceded by a dollar sign (e.g. $1
, $2
, $3
, and also $0
).
Here's a snippet to illustrate:
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
Questions:
- Is the use of
$
for backreferences in replacement strings unique to Java? If not, what language started it? What flavors use it and what don't? - Why is this a good idea? Why not stick to the same pattern syntax? Wouldn't that lead to a more cohesive and an easier to learn language?
- Wouldn't the syntax be more streamlined if statements 1 and 4 in the above were the "correct" ones instead of 2 and 3?
© Stack Overflow or respective owner