在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
Run Code Online (Sandbox Code Playgroud)
问题:
$在Java中特有的替换字符串中使用反向引用是什么?如果没有,用什么语言开始呢?什么口味使用它,什么不使用?我试图使用Notepad ++ Search/Replace with Regular Expression将特定单词替换为这些单词的较短版本.
我使用以下正则表达式来匹配每个以er(但不是er一个单词)结尾的单词 - 并r使用反向引用将相匹配的单词替换为相同的单词减去结尾:
Find what: ([a-zA-z]+e)r
Replace with: $1
但它不会取代匹配的单词,即使它找到了它们.
但是,如果我将反向引用语法更改为:
Replace with: \1
一切正常.
为什么$1反向引用不起作用?
两种形式的后退有什么区别 - \1和$1?