如果我在Scala中写这个:
System.err println "Done".replaceAll(".*$", "$0xyz")
然后输出意外地不是Donexyz
而是Donexyzxyz
。
我知道发生了什么 - Done
正在转变为Donexyz
,然后又发生了第二次替换,与Donexyz
匹配并将其转换为Donexyzxyz
}。 (使用replaceFirst
生成Donexyz
,确认这一点。)但这并不能解释所有事情 - 特别是我不知道为什么我们没有得到
Done -> Donexyz -> Donexyzxyz -> Donexyzxyzxyz -> ...
任何照明都会受到赞赏。