相关疑难解决方法(0)

替换字符串中的反向引用语法(为什么是美元符号?)

在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中特有的替换字符串中使用反向引用是什么?如果没有,用什么语言开始呢?什么口味使用它,什么不使用?
  • 为什么这是个好主意?为什么不坚持使用相同的模式语法?这不会导致更具凝聚力和更容易学习的语言吗?
    • 如果上面的语句1和4是"正确的"而不是2和3,语法是否会更加简化?

java regex syntax backreference replace

47
推荐指数
2
解决办法
3万
查看次数

搜索/替换中的Notepad ++ Regex Backreference语法 - \1或$ 1

我试图使用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

regex backreference replace escaping notepad++

35
推荐指数
1
解决办法
3万
查看次数

标签 统计

backreference ×2

regex ×2

replace ×2

escaping ×1

java ×1

notepad++ ×1

syntax ×1