可能重複:
String.replaceAll() anomaly with greedy quantifiers in regex的Java的replaceAll與反向引用
我正在寫一個使用Matcher#replaceAll
代碼,發現下面的結果非常令人困惑:
Pattern.compile("(.*)").matcher("sample").replaceAll("$1abc");
現在,我期望輸出爲sampleabc
,但Java拋出我sampleabcabc
。
有沒有人有任何想法爲什麼?
現在,當然,當我錨定模式(^(.*)$
)問題消失。但我不知道爲什麼地獄replaceAll
做這樣的雙重替換。
而要雪上加霜,下面的代碼:
Pattern.compile("(.*)").matcher("sample").replaceFirst("$1abc")
按預期工作,只返回sampleabc
。
@Pshemo:你說得對。對不起,我沒有找到這個事先提交。 – Wejn